From 0f6c144f0b114836bd5b09b6b198228d6ee5cd64 Mon Sep 17 00:00:00 2001 From: Aymeric Rateau Date: Wed, 8 Apr 2026 00:01:45 +0200 Subject: [PATCH 1/4] perf: 4x speedup for large MDF4 files, Cython SymBufReader, bump to v4.3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - read_all_channels_sorted_record: replace chunk loop with single readinto() into a pre-allocated recarray (zero-copy, writeable) — the main win: T3 1.7 GB file drops from 1.5s to 0.4s (4x faster) - DZ transpose: arr.T.tobytes() instead of .copy() + tobytes() (one fewer intermediate allocation) - Vectorize sign-extension in _apply_unsorted_bit_masking using np.where(negative, bitwise_or(temp_u, sign_extend), temp_u) - SI block cache in Info4._si_cache (keyed by file pointer) to skip duplicate Source Information block reads - Add SymBufReader cdef class to dataRead.pyx: bidirectional-buffered file wrapper that fills its C-level buffer centred on the current position, matching the mdfr Rust SymBufReader design; activated for all Info4 metadata reads via _SymBufReader import - Bump version to 4.3 Co-Authored-By: Claude Sonnet 4.6 --- dataRead.c | 21486 +++++++++++++-------- dataRead.cpython-313-x86_64-linux-gnu.so | Bin 1871888 -> 2289488 bytes dataRead.pyx | 89 + mdfconverter/__init__.py | 2 +- mdfreader/__init__.py | 2 +- mdfreader/mdf4reader.py | 29 +- mdfreader/mdfinfo4.py | 36 +- setup.py | 2 +- 8 files changed, 13581 insertions(+), 8065 deletions(-) diff --git a/dataRead.c b/dataRead.c index a478b14..24b02a0 100644 --- a/dataRead.c +++ b/dataRead.c @@ -1856,6 +1856,7 @@ static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_fro /* #### Code section: type_declarations ### */ /*--- Type declarations ---*/ +struct __pyx_obj_8dataRead_SymBufReader; struct __pyx_array_obj; struct __pyx_MemviewEnum_obj; struct __pyx_memoryview_obj; @@ -1879,6 +1880,24 @@ typedef int (*__pyx_t_5numpy_NpyIter_IterNextFunc)(NpyIter *); */ typedef void (*__pyx_t_5numpy_NpyIter_GetMultiIndexFunc)(NpyIter *, npy_intp *); +/* "dataRead.pyx":25 + * DEF SYM_BUF_SIZE = 65536 # 64 KB same default as Rust SymBufReader + * + * cdef class SymBufReader: # <<<<<<<<<<<<<< + * """Bidirectional-buffered wrapper around a Python file object. + * + */ +struct __pyx_obj_8dataRead_SymBufReader { + PyObject_HEAD + struct __pyx_vtabstruct_8dataRead_SymBufReader *__pyx_vtab; + PyObject *_fid; + unsigned char _buf[0x10000]; + Py_ssize_t _buf_start; + Py_ssize_t _buf_len; + Py_ssize_t _pos; +}; + + /* "View.MemoryView":114 * @cython.collection_type("sequence") * @cname("__pyx_array") @@ -1956,6 +1975,20 @@ struct __pyx_memoryviewslice_obj { +/* "dataRead.pyx":25 + * DEF SYM_BUF_SIZE = 65536 # 64 KB same default as Rust SymBufReader + * + * cdef class SymBufReader: # <<<<<<<<<<<<<< + * """Bidirectional-buffered wrapper around a Python file object. + * + */ + +struct __pyx_vtabstruct_8dataRead_SymBufReader { + int (*_fill)(struct __pyx_obj_8dataRead_SymBufReader *, Py_ssize_t); +}; +static struct __pyx_vtabstruct_8dataRead_SymBufReader *__pyx_vtabptr_8dataRead_SymBufReader; + + /* "View.MemoryView":114 * @cython.collection_type("sequence") * @cname("__pyx_array") @@ -2149,6 +2182,39 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, P /* GetBuiltinName.proto */ static PyObject *__Pyx_GetBuiltinName(PyObject *name); +/* GetTopmostException.proto */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); +#endif + +/* SaveResetException.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +#else +#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) +#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) +#endif + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, 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_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) +#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_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + /* TupleAndListFromArray.proto */ #if CYTHON_COMPILING_IN_CPYTHON static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n); @@ -2477,22 +2543,6 @@ static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); /* ExtTypeTest.proto */ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); -/* GetTopmostException.proto */ -#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE -static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); -#endif - -/* SaveResetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -#else -#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) -#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) -#endif - /* GetException.proto */ #if CYTHON_FAST_THREAD_STATE #define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) @@ -2518,23 +2568,6 @@ static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple); #endif -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, 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_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2)) -#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_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2) -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/ /* ListCompAppend.proto */ #if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS @@ -3192,6 +3225,9 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje #endif #endif +/* CIntFromPy.proto */ +static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *); + /* MemviewSliceCopyTemplate.proto */ static __Pyx_memviewslice __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, @@ -3224,6 +3260,9 @@ static CYTHON_INLINE int __pyx_sub_acquisition_count_locked( static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int); static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *, int, int); +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + /* CIntFromPy.proto */ static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *); @@ -3234,7 +3273,7 @@ static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_As_unsigned_PY_LONG_LONG( static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *); /* CIntFromPy.proto */ -static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *); +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value); @@ -3254,17 +3293,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char valu /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value); -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - /* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); /* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); /* CIntFromPy.proto */ static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *); @@ -3321,6 +3354,7 @@ static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObjec static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self); /* proto*/ static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self); /* proto*/ static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self); /* proto*/ +static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, Py_ssize_t __pyx_v_pos); /* proto*/ /* Module declarations from "libc.string" */ @@ -3380,6 +3414,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *, PyObje static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *, PyObject *, PyObject *, unsigned short, unsigned PY_LONG_LONG, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, PyObject *); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const *, unsigned PY_LONG_LONG *, unsigned long *, unsigned long, unsigned PY_LONG_LONG); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char const *, unsigned PY_LONG_LONG *, unsigned long *, unsigned long, unsigned PY_LONG_LONG, PyObject *); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const *, PyObject *, PyObject *, unsigned long, unsigned PY_LONG_LONG, unsigned short); /*proto*/ +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *, PyObject *, PyObject *, unsigned long, unsigned PY_LONG_LONG); /*proto*/ +static PyObject *__pyx_f_8dataRead___pyx_unpickle_SymBufReader__set_state(struct __pyx_obj_8dataRead_SymBufReader *, PyObject *); /*proto*/ +static int __Pyx_carray_from_py_unsigned_char(PyObject *, unsigned char *, Py_ssize_t); /*proto*/ static int __pyx_array_allocate_buffer(struct __pyx_array_obj *); /*proto*/ static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/ static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/ @@ -3437,14 +3475,15 @@ int __pyx_module_is_main_dataRead = 0; /* #### Code section: global_var ### */ static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_MemoryError; +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_OverflowError; +static PyObject *__pyx_builtin_enumerate; +static PyObject *__pyx_builtin_IndexError; static PyObject *__pyx_builtin___import__; static PyObject *__pyx_builtin_ValueError; -static PyObject *__pyx_builtin_enumerate; -static PyObject *__pyx_builtin_TypeError; static PyObject *__pyx_builtin_AssertionError; static PyObject *__pyx_builtin_Ellipsis; static PyObject *__pyx_builtin_id; -static PyObject *__pyx_builtin_IndexError; static PyObject *__pyx_builtin_ImportError; /* #### Code section: string_decls ### */ static const char __pyx_k_[] = ": "; @@ -3454,6 +3493,8 @@ static const char __pyx_k_S[] = "S"; static const char __pyx_k_U[] = "U{}"; static const char __pyx_k_V[] = "V"; static const char __pyx_k_c[] = "c"; +static const char __pyx_k_i[] = "i"; +static const char __pyx_k_n[] = "n"; static const char __pyx_k__2[] = "."; static const char __pyx_k__3[] = "*"; static const char __pyx_k__6[] = "'"; @@ -3462,20 +3503,26 @@ static const char __pyx_k_gc[] = "gc"; static const char __pyx_k_id[] = "id"; static const char __pyx_k_np[] = "np"; static const char __pyx_k_V_2[] = "V{}"; -static const char __pyx_k__11[] = "\000"; -static const char __pyx_k__29[] = "?"; +static const char __pyx_k__12[] = ""; +static const char __pyx_k__13[] = "\000"; +static const char __pyx_k__51[] = "?"; static const char __pyx_k_abc[] = "abc"; static const char __pyx_k_and[] = " and "; static const char __pyx_k_big[] = "big"; +static const char __pyx_k_bom[] = "bom"; static const char __pyx_k_buf[] = "buf"; +static const char __pyx_k_end[] = "end"; +static const char __pyx_k_fid[] = "fid"; static const char __pyx_k_got[] = " (got "; static const char __pyx_k_new[] = "__new__"; static const char __pyx_k_obj[] = "obj"; +static const char __pyx_k_pos[] = "pos"; static const char __pyx_k_rec[] = "rec"; static const char __pyx_k_sys[] = "sys"; static const char __pyx_k_tmp[] = "tmp"; static const char __pyx_k_VLSD[] = "VLSD"; static const char __pyx_k_base[] = "base"; +static const char __pyx_k_data[] = "data"; static const char __pyx_k_dict[] = "__dict__"; static const char __pyx_k_info[] = "info"; static const char __pyx_k_keys[] = "keys"; @@ -3484,10 +3531,14 @@ 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_pack[] = "pack"; +static const char __pyx_k_read[] = "read"; +static const char __pyx_k_seek[] = "seek"; +static const char __pyx_k_self[] = "self"; static const char __pyx_k_size[] = "size"; static const char __pyx_k_spec[] = "__spec__"; static const char __pyx_k_step[] = "step"; static const char __pyx_k_stop[] = "stop"; +static const char __pyx_k_tell[] = "tell"; static const char __pyx_k_test[] = "__test__"; static const char __pyx_k_view[] = "view"; static const char __pyx_k_ASCII[] = "ASCII"; @@ -3506,16 +3557,21 @@ static const char __pyx_k_range[] = "range"; static const char __pyx_k_rjust[] = "rjust"; static const char __pyx_k_shape[] = "shape"; static const char __pyx_k_start[] = "start"; +static const char __pyx_k_state[] = "state"; static const char __pyx_k_utf_8[] = "utf-8"; static const char __pyx_k_zeros[] = "zeros"; static const char __pyx_k_append[] = "append"; static const char __pyx_k_decode[] = "decode"; +static const char __pyx_k_dict_2[] = "_dict"; static const char __pyx_k_enable[] = "enable"; static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_errors[] = "errors"; +static const char __pyx_k_fileno[] = "fileno"; static const char __pyx_k_format[] = "format"; static const char __pyx_k_import[] = "__import__"; static const char __pyx_k_little[] = "little"; static const char __pyx_k_name_2[] = "__name__"; +static const char __pyx_k_offset[] = "offset"; static const char __pyx_k_pickle[] = "pickle"; static const char __pyx_k_record[] = "record"; static const char __pyx_k_reduce[] = "__reduce__"; @@ -3526,11 +3582,13 @@ static const char __pyx_k_unpack[] = "unpack"; static const char __pyx_k_update[] = "update"; static const char __pyx_k_utf_16[] = ""; static const char __pyx_k_VLSD_CG_signal_data_type[] = "VLSD_CG_signal_data_type"; static const char __pyx_k_Dimension_d_is_not_direct[] = "Dimension %d is not direct"; +static const char __pyx_k_pyx_unpickle_SymBufReader[] = "__pyx_unpickle_SymBufReader"; static const char __pyx_k_Index_out_of_bounds_axis_d[] = "Index out of bounds (axis %d)"; static const char __pyx_k_Step_may_not_be_zero_axis_d[] = "Step may not be zero (axis %d)"; static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array"; +static const char __pyx_k_SymBufReader___reduce_cython[] = "SymBufReader.__reduce_cython__"; static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data."; +static const char __pyx_k_SymBufReader___setstate_cython[] = "SymBufReader.__setstate_cython__"; static const char __pyx_k_strided_and_direct_or_indirect[] = ""; static const char __pyx_k_All_dimensions_preceding_dimensi[] = "All dimensions preceding dimension %d must be indexed and not sliced"; static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides"; @@ -3654,6 +3731,7 @@ static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __red static const char __pyx_k_numpy__core_multiarray_failed_to[] = "numpy._core.multiarray failed to import"; static const char __pyx_k_numpy__core_umath_failed_to_impo[] = "numpy._core.umath failed to import"; static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides."; +static const char __pyx_k_Incompatible_checksums_0x_x_vs_0_2[] = "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))"; /* #### Code section: decls ### */ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */ static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */ @@ -3696,9 +3774,19 @@ static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewsl static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */ static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */ static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static int __pyx_pf_8dataRead_12SymBufReader___init__(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, PyObject *__pyx_v_fid); /* proto */ +static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, Py_ssize_t __pyx_v_pos, int __pyx_v_whence); /* proto */ +static PyObject *__pyx_pf_8dataRead_12SymBufReader_4tell(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, Py_ssize_t __pyx_v_n); /* proto */ +static PyObject *__pyx_pf_8dataRead_12SymBufReader_8fileno(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_8dataRead_12SymBufReader_10__reduce_cython__(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_8dataRead_12SymBufReader_12__setstate_cython__(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tmp, unsigned short __pyx_v_bit_count, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, PyObject *__pyx_v_array); /* proto */ static PyObject *__pyx_pf_8dataRead_2unsorted_data_read4(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_record, PyObject *__pyx_v_info, PyObject *__pyx_v_tmp, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_data_block_length); /* proto */ static PyObject *__pyx_pf_8dataRead_4sd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_sd_block, CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length, unsigned PY_LONG_LONG __pyx_v_n_records); /* proto */ +static PyObject *__pyx_pf_8dataRead_6vd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_vd_block, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned PY_LONG_LONG __pyx_v_n_records); /* proto */ +static PyObject *__pyx_pf_8dataRead_8__pyx_unpickle_SymBufReader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ +static PyObject *__pyx_tp_new_8dataRead_SymBufReader(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ @@ -3778,11 +3866,13 @@ typedef struct { #if CYTHON_USE_MODULE_STATE #endif #if CYTHON_USE_MODULE_STATE + PyObject *__pyx_type_8dataRead_SymBufReader; PyObject *__pyx_type___pyx_array; PyObject *__pyx_type___pyx_MemviewEnum; PyObject *__pyx_type___pyx_memoryview; PyObject *__pyx_type___pyx_memoryviewslice; #endif + PyTypeObject *__pyx_ptype_8dataRead_SymBufReader; PyTypeObject *__pyx_array_type; PyTypeObject *__pyx_MemviewEnum_type; PyTypeObject *__pyx_memoryview_type; @@ -3805,8 +3895,10 @@ typedef struct { PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr; PyObject *__pyx_n_s_Flags; PyObject *__pyx_n_u_ISO8859; + PyObject *__pyx_kp_u_ISO_8859_1; PyObject *__pyx_n_s_ImportError; PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0; + PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2; PyObject *__pyx_n_s_IndexError; PyObject *__pyx_kp_s_Index_out_of_bounds_axis_d; PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte; @@ -3817,10 +3909,18 @@ typedef struct { PyObject *__pyx_kp_s_MemoryView_of_r_object; PyObject *__pyx_n_b_O; PyObject *__pyx_kp_u_Out_of_bounds_on_buffer_access_a; + PyObject *__pyx_n_s_OverflowError; PyObject *__pyx_n_s_PickleError; PyObject *__pyx_n_u_S; PyObject *__pyx_n_s_Sequence; PyObject *__pyx_kp_s_Step_may_not_be_zero_axis_d; + PyObject *__pyx_n_s_SymBufReader; + PyObject *__pyx_n_s_SymBufReader___reduce_cython; + PyObject *__pyx_n_s_SymBufReader___setstate_cython; + PyObject *__pyx_n_s_SymBufReader_fileno; + PyObject *__pyx_n_s_SymBufReader_read; + PyObject *__pyx_n_s_SymBufReader_seek; + PyObject *__pyx_n_s_SymBufReader_tell; PyObject *__pyx_n_s_TypeError; PyObject *__pyx_kp_u_U; PyObject *__pyx_kp_s_Unable_to_convert_item_to_object; @@ -3834,11 +3934,12 @@ typedef struct { PyObject *__pyx_kp_u_V_2; PyObject *__pyx_n_s_ValueError; PyObject *__pyx_n_s_View_MemoryView; - PyObject *__pyx_kp_b__11; - PyObject *__pyx_kp_u__11; + PyObject *__pyx_kp_b__12; + PyObject *__pyx_kp_b__13; + PyObject *__pyx_kp_u__13; PyObject *__pyx_kp_u__2; - PyObject *__pyx_n_s__29; PyObject *__pyx_n_s__3; + PyObject *__pyx_n_s__51; PyObject *__pyx_kp_u__6; PyObject *__pyx_kp_u__7; PyObject *__pyx_n_s_abc; @@ -3848,12 +3949,15 @@ typedef struct { PyObject *__pyx_n_s_array; PyObject *__pyx_n_s_asarray; PyObject *__pyx_n_s_asyncio_coroutines; + PyObject *__pyx_n_s_available; PyObject *__pyx_n_s_base; PyObject *__pyx_n_u_big; PyObject *__pyx_n_s_bit_count; PyObject *__pyx_n_s_bit_offset; PyObject *__pyx_n_s_bit_stream; + PyObject *__pyx_n_u_bom; PyObject *__pyx_n_s_buf; + PyObject *__pyx_n_s_buf_end; PyObject *__pyx_n_s_byteOffset; PyObject *__pyx_n_s_byte_length; PyObject *__pyx_n_s_byteorder; @@ -3875,20 +3979,26 @@ typedef struct { PyObject *__pyx_kp_s_contiguous_and_direct; PyObject *__pyx_kp_s_contiguous_and_indirect; PyObject *__pyx_n_s_count; + PyObject *__pyx_n_s_data; PyObject *__pyx_n_s_dataRead; PyObject *__pyx_kp_s_dataRead_pyx; PyObject *__pyx_n_s_data_block_length; PyObject *__pyx_n_s_data_format; PyObject *__pyx_n_s_decode; PyObject *__pyx_n_s_dict; + PyObject *__pyx_n_s_dict_2; PyObject *__pyx_kp_u_disable; PyObject *__pyx_n_s_dtype; PyObject *__pyx_n_s_dtype_is_object; PyObject *__pyx_n_s_empty; PyObject *__pyx_kp_u_enable; PyObject *__pyx_n_s_encode; + PyObject *__pyx_n_s_end; PyObject *__pyx_n_s_enumerate; PyObject *__pyx_n_s_error; + PyObject *__pyx_n_s_errors; + PyObject *__pyx_n_s_fid; + PyObject *__pyx_n_s_fileno; PyObject *__pyx_n_s_flags; PyObject *__pyx_n_s_float16; PyObject *__pyx_n_s_format; @@ -3899,6 +4009,7 @@ typedef struct { PyObject *__pyx_n_s_getstate; PyObject *__pyx_kp_u_got; PyObject *__pyx_kp_u_got_differing_extents_in_dimensi; + PyObject *__pyx_n_s_i; PyObject *__pyx_n_s_id; PyObject *__pyx_n_s_import; PyObject *__pyx_n_s_index; @@ -3914,6 +4025,7 @@ typedef struct { PyObject *__pyx_n_s_max_len; PyObject *__pyx_n_s_memview; PyObject *__pyx_n_s_mode; + PyObject *__pyx_n_s_n; PyObject *__pyx_n_s_nBytes_aligned; PyObject *__pyx_n_s_n_bytes; PyObject *__pyx_n_s_n_records; @@ -3930,10 +4042,13 @@ typedef struct { PyObject *__pyx_kp_u_numpy__core_umath_failed_to_impo; PyObject *__pyx_n_s_numpy_format; PyObject *__pyx_n_s_obj; + PyObject *__pyx_n_s_offset; + PyObject *__pyx_n_s_offsets_array; PyObject *__pyx_n_s_order; PyObject *__pyx_n_s_pack; PyObject *__pyx_n_s_pickle; PyObject *__pyx_n_s_pointer; + PyObject *__pyx_n_s_pos; PyObject *__pyx_n_s_pos_byte_beg; PyObject *__pyx_n_s_pos_byte_end; PyObject *__pyx_n_s_position; @@ -3943,8 +4058,10 @@ typedef struct { PyObject *__pyx_n_s_pyx_state; PyObject *__pyx_n_s_pyx_type; PyObject *__pyx_n_s_pyx_unpickle_Enum; + PyObject *__pyx_n_s_pyx_unpickle_SymBufReader; PyObject *__pyx_n_s_pyx_vtable; PyObject *__pyx_n_s_range; + PyObject *__pyx_n_s_read; PyObject *__pyx_n_s_rec; PyObject *__pyx_n_s_record; PyObject *__pyx_n_u_record; @@ -3960,19 +4077,24 @@ typedef struct { PyObject *__pyx_n_s_reduce_cython; PyObject *__pyx_n_s_reduce_ex; PyObject *__pyx_n_s_register; + PyObject *__pyx_n_u_replace; PyObject *__pyx_n_s_rjust; PyObject *__pyx_n_s_rstrip; PyObject *__pyx_n_s_sd_block; PyObject *__pyx_n_s_sd_block_length; PyObject *__pyx_n_s_sd_data_read; + PyObject *__pyx_n_s_seek; + PyObject *__pyx_n_s_self; PyObject *__pyx_n_s_setstate; PyObject *__pyx_n_s_setstate_cython; PyObject *__pyx_n_s_shape; PyObject *__pyx_n_s_signal_data_type; PyObject *__pyx_n_s_size; + PyObject *__pyx_n_s_sizes_array; PyObject *__pyx_n_s_sorted_data_read; PyObject *__pyx_n_s_spec; PyObject *__pyx_n_s_start; + PyObject *__pyx_n_s_state; PyObject *__pyx_n_s_step; PyObject *__pyx_n_s_stop; PyObject *__pyx_kp_s_strided_and_direct; @@ -3982,6 +4104,7 @@ typedef struct { PyObject *__pyx_n_s_struct; PyObject *__pyx_n_s_swap_flag; PyObject *__pyx_n_s_sys; + PyObject *__pyx_n_s_tell; PyObject *__pyx_n_s_test; PyObject *__pyx_n_s_tmp; PyObject *__pyx_n_s_uint16; @@ -3990,13 +4113,19 @@ typedef struct { PyObject *__pyx_n_s_unpack; PyObject *__pyx_n_s_unsorted_data_read4; PyObject *__pyx_n_s_update; + PyObject *__pyx_n_s_use_setstate; PyObject *__pyx_kp_u_utf_16; PyObject *__pyx_kp_u_utf_16_2; + PyObject *__pyx_kp_u_utf_16_be; + PyObject *__pyx_kp_u_utf_16_le; PyObject *__pyx_kp_u_utf_8; PyObject *__pyx_n_s_values; + PyObject *__pyx_n_s_vd_block; + PyObject *__pyx_n_s_vd_data_read; PyObject *__pyx_n_s_version_info; PyObject *__pyx_n_s_view; PyObject *__pyx_n_s_vlsd_len; + PyObject *__pyx_n_s_whence; PyObject *__pyx_n_s_zeros; PyObject *__pyx_int_0; PyObject *__pyx_int_1; @@ -4007,17 +4136,25 @@ typedef struct { PyObject *__pyx_int_8; PyObject *__pyx_int_9; PyObject *__pyx_int_33; + PyObject *__pyx_int_187; + PyObject *__pyx_int_191; + PyObject *__pyx_int_239; + PyObject *__pyx_int_254; + PyObject *__pyx_int_255; + PyObject *__pyx_int_65536; + PyObject *__pyx_int_55633519; PyObject *__pyx_int_112105877; + PyObject *__pyx_int_120882827; PyObject *__pyx_int_136983863; PyObject *__pyx_int_184977713; + PyObject *__pyx_int_218071849; PyObject *__pyx_int_neg_1; PyObject *__pyx_slice__5; PyObject *__pyx_tuple__4; PyObject *__pyx_tuple__8; PyObject *__pyx_tuple__9; PyObject *__pyx_tuple__10; - PyObject *__pyx_tuple__12; - PyObject *__pyx_tuple__13; + PyObject *__pyx_tuple__11; PyObject *__pyx_tuple__14; PyObject *__pyx_tuple__15; PyObject *__pyx_tuple__16; @@ -4026,13 +4163,35 @@ typedef struct { PyObject *__pyx_tuple__19; PyObject *__pyx_tuple__20; PyObject *__pyx_tuple__21; + PyObject *__pyx_tuple__22; PyObject *__pyx_tuple__23; + PyObject *__pyx_tuple__24; PyObject *__pyx_tuple__25; + PyObject *__pyx_tuple__26; PyObject *__pyx_tuple__27; - PyObject *__pyx_codeobj__22; - PyObject *__pyx_codeobj__24; - PyObject *__pyx_codeobj__26; - PyObject *__pyx_codeobj__28; + PyObject *__pyx_tuple__28; + PyObject *__pyx_tuple__30; + PyObject *__pyx_tuple__32; + PyObject *__pyx_tuple__33; + PyObject *__pyx_tuple__35; + PyObject *__pyx_tuple__38; + PyObject *__pyx_tuple__40; + PyObject *__pyx_tuple__42; + PyObject *__pyx_tuple__44; + PyObject *__pyx_tuple__46; + PyObject *__pyx_tuple__48; + PyObject *__pyx_codeobj__29; + PyObject *__pyx_codeobj__31; + PyObject *__pyx_codeobj__34; + PyObject *__pyx_codeobj__36; + PyObject *__pyx_codeobj__37; + PyObject *__pyx_codeobj__39; + PyObject *__pyx_codeobj__41; + PyObject *__pyx_codeobj__43; + PyObject *__pyx_codeobj__45; + PyObject *__pyx_codeobj__47; + PyObject *__pyx_codeobj__49; + PyObject *__pyx_codeobj__50; } __pyx_mstate; #if CYTHON_USE_MODULE_STATE @@ -4091,6 +4250,8 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible); Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character); Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc); + Py_CLEAR(clear_module_state->__pyx_ptype_8dataRead_SymBufReader); + Py_CLEAR(clear_module_state->__pyx_type_8dataRead_SymBufReader); Py_CLEAR(clear_module_state->__pyx_array_type); Py_CLEAR(clear_module_state->__pyx_type___pyx_array); Py_CLEAR(clear_module_state->__pyx_MemviewEnum_type); @@ -4117,8 +4278,10 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr); Py_CLEAR(clear_module_state->__pyx_n_s_Flags); Py_CLEAR(clear_module_state->__pyx_n_u_ISO8859); + Py_CLEAR(clear_module_state->__pyx_kp_u_ISO_8859_1); Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); Py_CLEAR(clear_module_state->__pyx_n_s_IndexError); Py_CLEAR(clear_module_state->__pyx_kp_s_Index_out_of_bounds_axis_d); Py_CLEAR(clear_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte); @@ -4129,10 +4292,18 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_object); Py_CLEAR(clear_module_state->__pyx_n_b_O); Py_CLEAR(clear_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + Py_CLEAR(clear_module_state->__pyx_n_s_OverflowError); Py_CLEAR(clear_module_state->__pyx_n_s_PickleError); Py_CLEAR(clear_module_state->__pyx_n_u_S); Py_CLEAR(clear_module_state->__pyx_n_s_Sequence); Py_CLEAR(clear_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d); + Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader); + Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader___reduce_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader___setstate_cython); + Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader_fileno); + Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader_read); + Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader_seek); + Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader_tell); Py_CLEAR(clear_module_state->__pyx_n_s_TypeError); Py_CLEAR(clear_module_state->__pyx_kp_u_U); Py_CLEAR(clear_module_state->__pyx_kp_s_Unable_to_convert_item_to_object); @@ -4146,11 +4317,12 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_kp_u_V_2); Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); Py_CLEAR(clear_module_state->__pyx_n_s_View_MemoryView); - Py_CLEAR(clear_module_state->__pyx_kp_b__11); - Py_CLEAR(clear_module_state->__pyx_kp_u__11); + Py_CLEAR(clear_module_state->__pyx_kp_b__12); + Py_CLEAR(clear_module_state->__pyx_kp_b__13); + Py_CLEAR(clear_module_state->__pyx_kp_u__13); Py_CLEAR(clear_module_state->__pyx_kp_u__2); - Py_CLEAR(clear_module_state->__pyx_n_s__29); Py_CLEAR(clear_module_state->__pyx_n_s__3); + Py_CLEAR(clear_module_state->__pyx_n_s__51); Py_CLEAR(clear_module_state->__pyx_kp_u__6); Py_CLEAR(clear_module_state->__pyx_kp_u__7); Py_CLEAR(clear_module_state->__pyx_n_s_abc); @@ -4160,12 +4332,15 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_array); Py_CLEAR(clear_module_state->__pyx_n_s_asarray); Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines); + Py_CLEAR(clear_module_state->__pyx_n_s_available); Py_CLEAR(clear_module_state->__pyx_n_s_base); Py_CLEAR(clear_module_state->__pyx_n_u_big); Py_CLEAR(clear_module_state->__pyx_n_s_bit_count); Py_CLEAR(clear_module_state->__pyx_n_s_bit_offset); Py_CLEAR(clear_module_state->__pyx_n_s_bit_stream); + Py_CLEAR(clear_module_state->__pyx_n_u_bom); Py_CLEAR(clear_module_state->__pyx_n_s_buf); + Py_CLEAR(clear_module_state->__pyx_n_s_buf_end); Py_CLEAR(clear_module_state->__pyx_n_s_byteOffset); Py_CLEAR(clear_module_state->__pyx_n_s_byte_length); Py_CLEAR(clear_module_state->__pyx_n_s_byteorder); @@ -4187,20 +4362,26 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_direct); Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_indirect); Py_CLEAR(clear_module_state->__pyx_n_s_count); + Py_CLEAR(clear_module_state->__pyx_n_s_data); Py_CLEAR(clear_module_state->__pyx_n_s_dataRead); Py_CLEAR(clear_module_state->__pyx_kp_s_dataRead_pyx); Py_CLEAR(clear_module_state->__pyx_n_s_data_block_length); Py_CLEAR(clear_module_state->__pyx_n_s_data_format); Py_CLEAR(clear_module_state->__pyx_n_s_decode); Py_CLEAR(clear_module_state->__pyx_n_s_dict); + Py_CLEAR(clear_module_state->__pyx_n_s_dict_2); Py_CLEAR(clear_module_state->__pyx_kp_u_disable); Py_CLEAR(clear_module_state->__pyx_n_s_dtype); Py_CLEAR(clear_module_state->__pyx_n_s_dtype_is_object); Py_CLEAR(clear_module_state->__pyx_n_s_empty); Py_CLEAR(clear_module_state->__pyx_kp_u_enable); Py_CLEAR(clear_module_state->__pyx_n_s_encode); + Py_CLEAR(clear_module_state->__pyx_n_s_end); Py_CLEAR(clear_module_state->__pyx_n_s_enumerate); Py_CLEAR(clear_module_state->__pyx_n_s_error); + Py_CLEAR(clear_module_state->__pyx_n_s_errors); + Py_CLEAR(clear_module_state->__pyx_n_s_fid); + Py_CLEAR(clear_module_state->__pyx_n_s_fileno); Py_CLEAR(clear_module_state->__pyx_n_s_flags); Py_CLEAR(clear_module_state->__pyx_n_s_float16); Py_CLEAR(clear_module_state->__pyx_n_s_format); @@ -4211,6 +4392,7 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_getstate); Py_CLEAR(clear_module_state->__pyx_kp_u_got); Py_CLEAR(clear_module_state->__pyx_kp_u_got_differing_extents_in_dimensi); + Py_CLEAR(clear_module_state->__pyx_n_s_i); Py_CLEAR(clear_module_state->__pyx_n_s_id); Py_CLEAR(clear_module_state->__pyx_n_s_import); Py_CLEAR(clear_module_state->__pyx_n_s_index); @@ -4226,6 +4408,7 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_max_len); Py_CLEAR(clear_module_state->__pyx_n_s_memview); Py_CLEAR(clear_module_state->__pyx_n_s_mode); + Py_CLEAR(clear_module_state->__pyx_n_s_n); Py_CLEAR(clear_module_state->__pyx_n_s_nBytes_aligned); Py_CLEAR(clear_module_state->__pyx_n_s_n_bytes); Py_CLEAR(clear_module_state->__pyx_n_s_n_records); @@ -4242,10 +4425,13 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); Py_CLEAR(clear_module_state->__pyx_n_s_numpy_format); Py_CLEAR(clear_module_state->__pyx_n_s_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_offsets_array); Py_CLEAR(clear_module_state->__pyx_n_s_order); Py_CLEAR(clear_module_state->__pyx_n_s_pack); Py_CLEAR(clear_module_state->__pyx_n_s_pickle); Py_CLEAR(clear_module_state->__pyx_n_s_pointer); + Py_CLEAR(clear_module_state->__pyx_n_s_pos); Py_CLEAR(clear_module_state->__pyx_n_s_pos_byte_beg); Py_CLEAR(clear_module_state->__pyx_n_s_pos_byte_end); Py_CLEAR(clear_module_state->__pyx_n_s_position); @@ -4255,8 +4441,10 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state); Py_CLEAR(clear_module_state->__pyx_n_s_pyx_type); Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_Enum); + Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_SymBufReader); Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable); Py_CLEAR(clear_module_state->__pyx_n_s_range); + Py_CLEAR(clear_module_state->__pyx_n_s_read); Py_CLEAR(clear_module_state->__pyx_n_s_rec); Py_CLEAR(clear_module_state->__pyx_n_s_record); Py_CLEAR(clear_module_state->__pyx_n_u_record); @@ -4272,19 +4460,24 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython); Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex); Py_CLEAR(clear_module_state->__pyx_n_s_register); + Py_CLEAR(clear_module_state->__pyx_n_u_replace); Py_CLEAR(clear_module_state->__pyx_n_s_rjust); Py_CLEAR(clear_module_state->__pyx_n_s_rstrip); Py_CLEAR(clear_module_state->__pyx_n_s_sd_block); Py_CLEAR(clear_module_state->__pyx_n_s_sd_block_length); Py_CLEAR(clear_module_state->__pyx_n_s_sd_data_read); + Py_CLEAR(clear_module_state->__pyx_n_s_seek); + Py_CLEAR(clear_module_state->__pyx_n_s_self); Py_CLEAR(clear_module_state->__pyx_n_s_setstate); Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython); Py_CLEAR(clear_module_state->__pyx_n_s_shape); Py_CLEAR(clear_module_state->__pyx_n_s_signal_data_type); Py_CLEAR(clear_module_state->__pyx_n_s_size); + Py_CLEAR(clear_module_state->__pyx_n_s_sizes_array); Py_CLEAR(clear_module_state->__pyx_n_s_sorted_data_read); Py_CLEAR(clear_module_state->__pyx_n_s_spec); Py_CLEAR(clear_module_state->__pyx_n_s_start); + Py_CLEAR(clear_module_state->__pyx_n_s_state); Py_CLEAR(clear_module_state->__pyx_n_s_step); Py_CLEAR(clear_module_state->__pyx_n_s_stop); Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_direct); @@ -4294,6 +4487,7 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_struct); Py_CLEAR(clear_module_state->__pyx_n_s_swap_flag); Py_CLEAR(clear_module_state->__pyx_n_s_sys); + Py_CLEAR(clear_module_state->__pyx_n_s_tell); Py_CLEAR(clear_module_state->__pyx_n_s_test); Py_CLEAR(clear_module_state->__pyx_n_s_tmp); Py_CLEAR(clear_module_state->__pyx_n_s_uint16); @@ -4302,13 +4496,19 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_unpack); Py_CLEAR(clear_module_state->__pyx_n_s_unsorted_data_read4); Py_CLEAR(clear_module_state->__pyx_n_s_update); + Py_CLEAR(clear_module_state->__pyx_n_s_use_setstate); Py_CLEAR(clear_module_state->__pyx_kp_u_utf_16); Py_CLEAR(clear_module_state->__pyx_kp_u_utf_16_2); + Py_CLEAR(clear_module_state->__pyx_kp_u_utf_16_be); + Py_CLEAR(clear_module_state->__pyx_kp_u_utf_16_le); Py_CLEAR(clear_module_state->__pyx_kp_u_utf_8); Py_CLEAR(clear_module_state->__pyx_n_s_values); + Py_CLEAR(clear_module_state->__pyx_n_s_vd_block); + Py_CLEAR(clear_module_state->__pyx_n_s_vd_data_read); Py_CLEAR(clear_module_state->__pyx_n_s_version_info); Py_CLEAR(clear_module_state->__pyx_n_s_view); Py_CLEAR(clear_module_state->__pyx_n_s_vlsd_len); + Py_CLEAR(clear_module_state->__pyx_n_s_whence); Py_CLEAR(clear_module_state->__pyx_n_s_zeros); Py_CLEAR(clear_module_state->__pyx_int_0); Py_CLEAR(clear_module_state->__pyx_int_1); @@ -4319,17 +4519,25 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_int_8); Py_CLEAR(clear_module_state->__pyx_int_9); Py_CLEAR(clear_module_state->__pyx_int_33); + Py_CLEAR(clear_module_state->__pyx_int_187); + Py_CLEAR(clear_module_state->__pyx_int_191); + Py_CLEAR(clear_module_state->__pyx_int_239); + Py_CLEAR(clear_module_state->__pyx_int_254); + Py_CLEAR(clear_module_state->__pyx_int_255); + Py_CLEAR(clear_module_state->__pyx_int_65536); + Py_CLEAR(clear_module_state->__pyx_int_55633519); Py_CLEAR(clear_module_state->__pyx_int_112105877); + Py_CLEAR(clear_module_state->__pyx_int_120882827); Py_CLEAR(clear_module_state->__pyx_int_136983863); Py_CLEAR(clear_module_state->__pyx_int_184977713); + Py_CLEAR(clear_module_state->__pyx_int_218071849); Py_CLEAR(clear_module_state->__pyx_int_neg_1); Py_CLEAR(clear_module_state->__pyx_slice__5); Py_CLEAR(clear_module_state->__pyx_tuple__4); Py_CLEAR(clear_module_state->__pyx_tuple__8); Py_CLEAR(clear_module_state->__pyx_tuple__9); Py_CLEAR(clear_module_state->__pyx_tuple__10); - Py_CLEAR(clear_module_state->__pyx_tuple__12); - Py_CLEAR(clear_module_state->__pyx_tuple__13); + Py_CLEAR(clear_module_state->__pyx_tuple__11); Py_CLEAR(clear_module_state->__pyx_tuple__14); Py_CLEAR(clear_module_state->__pyx_tuple__15); Py_CLEAR(clear_module_state->__pyx_tuple__16); @@ -4338,13 +4546,35 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_tuple__19); Py_CLEAR(clear_module_state->__pyx_tuple__20); Py_CLEAR(clear_module_state->__pyx_tuple__21); + Py_CLEAR(clear_module_state->__pyx_tuple__22); Py_CLEAR(clear_module_state->__pyx_tuple__23); + Py_CLEAR(clear_module_state->__pyx_tuple__24); Py_CLEAR(clear_module_state->__pyx_tuple__25); + Py_CLEAR(clear_module_state->__pyx_tuple__26); Py_CLEAR(clear_module_state->__pyx_tuple__27); - Py_CLEAR(clear_module_state->__pyx_codeobj__22); - Py_CLEAR(clear_module_state->__pyx_codeobj__24); - Py_CLEAR(clear_module_state->__pyx_codeobj__26); - Py_CLEAR(clear_module_state->__pyx_codeobj__28); + Py_CLEAR(clear_module_state->__pyx_tuple__28); + Py_CLEAR(clear_module_state->__pyx_tuple__30); + Py_CLEAR(clear_module_state->__pyx_tuple__32); + Py_CLEAR(clear_module_state->__pyx_tuple__33); + Py_CLEAR(clear_module_state->__pyx_tuple__35); + Py_CLEAR(clear_module_state->__pyx_tuple__38); + Py_CLEAR(clear_module_state->__pyx_tuple__40); + Py_CLEAR(clear_module_state->__pyx_tuple__42); + Py_CLEAR(clear_module_state->__pyx_tuple__44); + Py_CLEAR(clear_module_state->__pyx_tuple__46); + Py_CLEAR(clear_module_state->__pyx_tuple__48); + Py_CLEAR(clear_module_state->__pyx_codeobj__29); + Py_CLEAR(clear_module_state->__pyx_codeobj__31); + Py_CLEAR(clear_module_state->__pyx_codeobj__34); + Py_CLEAR(clear_module_state->__pyx_codeobj__36); + Py_CLEAR(clear_module_state->__pyx_codeobj__37); + Py_CLEAR(clear_module_state->__pyx_codeobj__39); + Py_CLEAR(clear_module_state->__pyx_codeobj__41); + Py_CLEAR(clear_module_state->__pyx_codeobj__43); + Py_CLEAR(clear_module_state->__pyx_codeobj__45); + Py_CLEAR(clear_module_state->__pyx_codeobj__47); + Py_CLEAR(clear_module_state->__pyx_codeobj__49); + Py_CLEAR(clear_module_state->__pyx_codeobj__50); return 0; } #endif @@ -4381,6 +4611,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible); Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character); Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc); + Py_VISIT(traverse_module_state->__pyx_ptype_8dataRead_SymBufReader); + Py_VISIT(traverse_module_state->__pyx_type_8dataRead_SymBufReader); Py_VISIT(traverse_module_state->__pyx_array_type); Py_VISIT(traverse_module_state->__pyx_type___pyx_array); Py_VISIT(traverse_module_state->__pyx_MemviewEnum_type); @@ -4407,8 +4639,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr); Py_VISIT(traverse_module_state->__pyx_n_s_Flags); Py_VISIT(traverse_module_state->__pyx_n_u_ISO8859); + Py_VISIT(traverse_module_state->__pyx_kp_u_ISO_8859_1); Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); + Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); Py_VISIT(traverse_module_state->__pyx_n_s_IndexError); Py_VISIT(traverse_module_state->__pyx_kp_s_Index_out_of_bounds_axis_d); Py_VISIT(traverse_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte); @@ -4419,10 +4653,18 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_object); Py_VISIT(traverse_module_state->__pyx_n_b_O); Py_VISIT(traverse_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a); + Py_VISIT(traverse_module_state->__pyx_n_s_OverflowError); Py_VISIT(traverse_module_state->__pyx_n_s_PickleError); Py_VISIT(traverse_module_state->__pyx_n_u_S); Py_VISIT(traverse_module_state->__pyx_n_s_Sequence); Py_VISIT(traverse_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d); + Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader); + Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader___reduce_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader___setstate_cython); + Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader_fileno); + Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader_read); + Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader_seek); + Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader_tell); Py_VISIT(traverse_module_state->__pyx_n_s_TypeError); Py_VISIT(traverse_module_state->__pyx_kp_u_U); Py_VISIT(traverse_module_state->__pyx_kp_s_Unable_to_convert_item_to_object); @@ -4436,11 +4678,12 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_kp_u_V_2); Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); Py_VISIT(traverse_module_state->__pyx_n_s_View_MemoryView); - Py_VISIT(traverse_module_state->__pyx_kp_b__11); - Py_VISIT(traverse_module_state->__pyx_kp_u__11); + Py_VISIT(traverse_module_state->__pyx_kp_b__12); + Py_VISIT(traverse_module_state->__pyx_kp_b__13); + Py_VISIT(traverse_module_state->__pyx_kp_u__13); Py_VISIT(traverse_module_state->__pyx_kp_u__2); - Py_VISIT(traverse_module_state->__pyx_n_s__29); Py_VISIT(traverse_module_state->__pyx_n_s__3); + Py_VISIT(traverse_module_state->__pyx_n_s__51); Py_VISIT(traverse_module_state->__pyx_kp_u__6); Py_VISIT(traverse_module_state->__pyx_kp_u__7); Py_VISIT(traverse_module_state->__pyx_n_s_abc); @@ -4450,12 +4693,15 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_array); Py_VISIT(traverse_module_state->__pyx_n_s_asarray); Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines); + Py_VISIT(traverse_module_state->__pyx_n_s_available); Py_VISIT(traverse_module_state->__pyx_n_s_base); Py_VISIT(traverse_module_state->__pyx_n_u_big); Py_VISIT(traverse_module_state->__pyx_n_s_bit_count); Py_VISIT(traverse_module_state->__pyx_n_s_bit_offset); Py_VISIT(traverse_module_state->__pyx_n_s_bit_stream); + Py_VISIT(traverse_module_state->__pyx_n_u_bom); Py_VISIT(traverse_module_state->__pyx_n_s_buf); + Py_VISIT(traverse_module_state->__pyx_n_s_buf_end); Py_VISIT(traverse_module_state->__pyx_n_s_byteOffset); Py_VISIT(traverse_module_state->__pyx_n_s_byte_length); Py_VISIT(traverse_module_state->__pyx_n_s_byteorder); @@ -4477,20 +4723,26 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_direct); Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_indirect); Py_VISIT(traverse_module_state->__pyx_n_s_count); + Py_VISIT(traverse_module_state->__pyx_n_s_data); Py_VISIT(traverse_module_state->__pyx_n_s_dataRead); Py_VISIT(traverse_module_state->__pyx_kp_s_dataRead_pyx); Py_VISIT(traverse_module_state->__pyx_n_s_data_block_length); Py_VISIT(traverse_module_state->__pyx_n_s_data_format); Py_VISIT(traverse_module_state->__pyx_n_s_decode); Py_VISIT(traverse_module_state->__pyx_n_s_dict); + Py_VISIT(traverse_module_state->__pyx_n_s_dict_2); Py_VISIT(traverse_module_state->__pyx_kp_u_disable); Py_VISIT(traverse_module_state->__pyx_n_s_dtype); Py_VISIT(traverse_module_state->__pyx_n_s_dtype_is_object); Py_VISIT(traverse_module_state->__pyx_n_s_empty); Py_VISIT(traverse_module_state->__pyx_kp_u_enable); Py_VISIT(traverse_module_state->__pyx_n_s_encode); + Py_VISIT(traverse_module_state->__pyx_n_s_end); Py_VISIT(traverse_module_state->__pyx_n_s_enumerate); Py_VISIT(traverse_module_state->__pyx_n_s_error); + Py_VISIT(traverse_module_state->__pyx_n_s_errors); + Py_VISIT(traverse_module_state->__pyx_n_s_fid); + Py_VISIT(traverse_module_state->__pyx_n_s_fileno); Py_VISIT(traverse_module_state->__pyx_n_s_flags); Py_VISIT(traverse_module_state->__pyx_n_s_float16); Py_VISIT(traverse_module_state->__pyx_n_s_format); @@ -4501,6 +4753,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_getstate); Py_VISIT(traverse_module_state->__pyx_kp_u_got); Py_VISIT(traverse_module_state->__pyx_kp_u_got_differing_extents_in_dimensi); + Py_VISIT(traverse_module_state->__pyx_n_s_i); Py_VISIT(traverse_module_state->__pyx_n_s_id); Py_VISIT(traverse_module_state->__pyx_n_s_import); Py_VISIT(traverse_module_state->__pyx_n_s_index); @@ -4516,6 +4769,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_max_len); Py_VISIT(traverse_module_state->__pyx_n_s_memview); Py_VISIT(traverse_module_state->__pyx_n_s_mode); + Py_VISIT(traverse_module_state->__pyx_n_s_n); Py_VISIT(traverse_module_state->__pyx_n_s_nBytes_aligned); Py_VISIT(traverse_module_state->__pyx_n_s_n_bytes); Py_VISIT(traverse_module_state->__pyx_n_s_n_records); @@ -4532,10 +4786,13 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); Py_VISIT(traverse_module_state->__pyx_n_s_numpy_format); Py_VISIT(traverse_module_state->__pyx_n_s_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_offsets_array); Py_VISIT(traverse_module_state->__pyx_n_s_order); Py_VISIT(traverse_module_state->__pyx_n_s_pack); Py_VISIT(traverse_module_state->__pyx_n_s_pickle); Py_VISIT(traverse_module_state->__pyx_n_s_pointer); + Py_VISIT(traverse_module_state->__pyx_n_s_pos); Py_VISIT(traverse_module_state->__pyx_n_s_pos_byte_beg); Py_VISIT(traverse_module_state->__pyx_n_s_pos_byte_end); Py_VISIT(traverse_module_state->__pyx_n_s_position); @@ -4545,8 +4802,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state); Py_VISIT(traverse_module_state->__pyx_n_s_pyx_type); Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_Enum); + Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_SymBufReader); Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable); Py_VISIT(traverse_module_state->__pyx_n_s_range); + Py_VISIT(traverse_module_state->__pyx_n_s_read); Py_VISIT(traverse_module_state->__pyx_n_s_rec); Py_VISIT(traverse_module_state->__pyx_n_s_record); Py_VISIT(traverse_module_state->__pyx_n_u_record); @@ -4562,19 +4821,24 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython); Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex); Py_VISIT(traverse_module_state->__pyx_n_s_register); + Py_VISIT(traverse_module_state->__pyx_n_u_replace); Py_VISIT(traverse_module_state->__pyx_n_s_rjust); Py_VISIT(traverse_module_state->__pyx_n_s_rstrip); Py_VISIT(traverse_module_state->__pyx_n_s_sd_block); Py_VISIT(traverse_module_state->__pyx_n_s_sd_block_length); Py_VISIT(traverse_module_state->__pyx_n_s_sd_data_read); + Py_VISIT(traverse_module_state->__pyx_n_s_seek); + Py_VISIT(traverse_module_state->__pyx_n_s_self); Py_VISIT(traverse_module_state->__pyx_n_s_setstate); Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython); Py_VISIT(traverse_module_state->__pyx_n_s_shape); Py_VISIT(traverse_module_state->__pyx_n_s_signal_data_type); Py_VISIT(traverse_module_state->__pyx_n_s_size); + Py_VISIT(traverse_module_state->__pyx_n_s_sizes_array); Py_VISIT(traverse_module_state->__pyx_n_s_sorted_data_read); Py_VISIT(traverse_module_state->__pyx_n_s_spec); Py_VISIT(traverse_module_state->__pyx_n_s_start); + Py_VISIT(traverse_module_state->__pyx_n_s_state); Py_VISIT(traverse_module_state->__pyx_n_s_step); Py_VISIT(traverse_module_state->__pyx_n_s_stop); Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_direct); @@ -4584,6 +4848,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_struct); Py_VISIT(traverse_module_state->__pyx_n_s_swap_flag); Py_VISIT(traverse_module_state->__pyx_n_s_sys); + Py_VISIT(traverse_module_state->__pyx_n_s_tell); Py_VISIT(traverse_module_state->__pyx_n_s_test); Py_VISIT(traverse_module_state->__pyx_n_s_tmp); Py_VISIT(traverse_module_state->__pyx_n_s_uint16); @@ -4592,13 +4857,19 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_unpack); Py_VISIT(traverse_module_state->__pyx_n_s_unsorted_data_read4); Py_VISIT(traverse_module_state->__pyx_n_s_update); + Py_VISIT(traverse_module_state->__pyx_n_s_use_setstate); Py_VISIT(traverse_module_state->__pyx_kp_u_utf_16); Py_VISIT(traverse_module_state->__pyx_kp_u_utf_16_2); + Py_VISIT(traverse_module_state->__pyx_kp_u_utf_16_be); + Py_VISIT(traverse_module_state->__pyx_kp_u_utf_16_le); Py_VISIT(traverse_module_state->__pyx_kp_u_utf_8); Py_VISIT(traverse_module_state->__pyx_n_s_values); + Py_VISIT(traverse_module_state->__pyx_n_s_vd_block); + Py_VISIT(traverse_module_state->__pyx_n_s_vd_data_read); Py_VISIT(traverse_module_state->__pyx_n_s_version_info); Py_VISIT(traverse_module_state->__pyx_n_s_view); Py_VISIT(traverse_module_state->__pyx_n_s_vlsd_len); + Py_VISIT(traverse_module_state->__pyx_n_s_whence); Py_VISIT(traverse_module_state->__pyx_n_s_zeros); Py_VISIT(traverse_module_state->__pyx_int_0); Py_VISIT(traverse_module_state->__pyx_int_1); @@ -4609,17 +4880,25 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_int_8); Py_VISIT(traverse_module_state->__pyx_int_9); Py_VISIT(traverse_module_state->__pyx_int_33); + Py_VISIT(traverse_module_state->__pyx_int_187); + Py_VISIT(traverse_module_state->__pyx_int_191); + Py_VISIT(traverse_module_state->__pyx_int_239); + Py_VISIT(traverse_module_state->__pyx_int_254); + Py_VISIT(traverse_module_state->__pyx_int_255); + Py_VISIT(traverse_module_state->__pyx_int_65536); + Py_VISIT(traverse_module_state->__pyx_int_55633519); Py_VISIT(traverse_module_state->__pyx_int_112105877); + Py_VISIT(traverse_module_state->__pyx_int_120882827); Py_VISIT(traverse_module_state->__pyx_int_136983863); Py_VISIT(traverse_module_state->__pyx_int_184977713); + Py_VISIT(traverse_module_state->__pyx_int_218071849); Py_VISIT(traverse_module_state->__pyx_int_neg_1); Py_VISIT(traverse_module_state->__pyx_slice__5); Py_VISIT(traverse_module_state->__pyx_tuple__4); Py_VISIT(traverse_module_state->__pyx_tuple__8); Py_VISIT(traverse_module_state->__pyx_tuple__9); Py_VISIT(traverse_module_state->__pyx_tuple__10); - Py_VISIT(traverse_module_state->__pyx_tuple__12); - Py_VISIT(traverse_module_state->__pyx_tuple__13); + Py_VISIT(traverse_module_state->__pyx_tuple__11); Py_VISIT(traverse_module_state->__pyx_tuple__14); Py_VISIT(traverse_module_state->__pyx_tuple__15); Py_VISIT(traverse_module_state->__pyx_tuple__16); @@ -4628,13 +4907,35 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_tuple__19); Py_VISIT(traverse_module_state->__pyx_tuple__20); Py_VISIT(traverse_module_state->__pyx_tuple__21); + Py_VISIT(traverse_module_state->__pyx_tuple__22); Py_VISIT(traverse_module_state->__pyx_tuple__23); + Py_VISIT(traverse_module_state->__pyx_tuple__24); Py_VISIT(traverse_module_state->__pyx_tuple__25); + Py_VISIT(traverse_module_state->__pyx_tuple__26); Py_VISIT(traverse_module_state->__pyx_tuple__27); - Py_VISIT(traverse_module_state->__pyx_codeobj__22); - Py_VISIT(traverse_module_state->__pyx_codeobj__24); - Py_VISIT(traverse_module_state->__pyx_codeobj__26); - Py_VISIT(traverse_module_state->__pyx_codeobj__28); + Py_VISIT(traverse_module_state->__pyx_tuple__28); + Py_VISIT(traverse_module_state->__pyx_tuple__30); + Py_VISIT(traverse_module_state->__pyx_tuple__32); + Py_VISIT(traverse_module_state->__pyx_tuple__33); + Py_VISIT(traverse_module_state->__pyx_tuple__35); + Py_VISIT(traverse_module_state->__pyx_tuple__38); + Py_VISIT(traverse_module_state->__pyx_tuple__40); + Py_VISIT(traverse_module_state->__pyx_tuple__42); + Py_VISIT(traverse_module_state->__pyx_tuple__44); + Py_VISIT(traverse_module_state->__pyx_tuple__46); + Py_VISIT(traverse_module_state->__pyx_tuple__48); + Py_VISIT(traverse_module_state->__pyx_codeobj__29); + Py_VISIT(traverse_module_state->__pyx_codeobj__31); + Py_VISIT(traverse_module_state->__pyx_codeobj__34); + Py_VISIT(traverse_module_state->__pyx_codeobj__36); + Py_VISIT(traverse_module_state->__pyx_codeobj__37); + Py_VISIT(traverse_module_state->__pyx_codeobj__39); + Py_VISIT(traverse_module_state->__pyx_codeobj__41); + Py_VISIT(traverse_module_state->__pyx_codeobj__43); + Py_VISIT(traverse_module_state->__pyx_codeobj__45); + Py_VISIT(traverse_module_state->__pyx_codeobj__47); + Py_VISIT(traverse_module_state->__pyx_codeobj__49); + Py_VISIT(traverse_module_state->__pyx_codeobj__50); return 0; } #endif @@ -4710,11 +5011,13 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #if CYTHON_USE_MODULE_STATE #endif #if CYTHON_USE_MODULE_STATE +#define __pyx_type_8dataRead_SymBufReader __pyx_mstate_global->__pyx_type_8dataRead_SymBufReader #define __pyx_type___pyx_array __pyx_mstate_global->__pyx_type___pyx_array #define __pyx_type___pyx_MemviewEnum __pyx_mstate_global->__pyx_type___pyx_MemviewEnum #define __pyx_type___pyx_memoryview __pyx_mstate_global->__pyx_type___pyx_memoryview #define __pyx_type___pyx_memoryviewslice __pyx_mstate_global->__pyx_type___pyx_memoryviewslice #endif +#define __pyx_ptype_8dataRead_SymBufReader __pyx_mstate_global->__pyx_ptype_8dataRead_SymBufReader #define __pyx_array_type __pyx_mstate_global->__pyx_array_type #define __pyx_MemviewEnum_type __pyx_mstate_global->__pyx_MemviewEnum_type #define __pyx_memoryview_type __pyx_mstate_global->__pyx_memoryview_type @@ -4737,8 +5040,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_kp_s_Empty_shape_tuple_for_cython_arr __pyx_mstate_global->__pyx_kp_s_Empty_shape_tuple_for_cython_arr #define __pyx_n_s_Flags __pyx_mstate_global->__pyx_n_s_Flags #define __pyx_n_u_ISO8859 __pyx_mstate_global->__pyx_n_u_ISO8859 +#define __pyx_kp_u_ISO_8859_1 __pyx_mstate_global->__pyx_kp_u_ISO_8859_1 #define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError #define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0 +#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 #define __pyx_n_s_IndexError __pyx_mstate_global->__pyx_n_s_IndexError #define __pyx_kp_s_Index_out_of_bounds_axis_d __pyx_mstate_global->__pyx_kp_s_Index_out_of_bounds_axis_d #define __pyx_kp_s_Indirect_dimensions_not_supporte __pyx_mstate_global->__pyx_kp_s_Indirect_dimensions_not_supporte @@ -4749,10 +5054,18 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_kp_s_MemoryView_of_r_object __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_object #define __pyx_n_b_O __pyx_mstate_global->__pyx_n_b_O #define __pyx_kp_u_Out_of_bounds_on_buffer_access_a __pyx_mstate_global->__pyx_kp_u_Out_of_bounds_on_buffer_access_a +#define __pyx_n_s_OverflowError __pyx_mstate_global->__pyx_n_s_OverflowError #define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError #define __pyx_n_u_S __pyx_mstate_global->__pyx_n_u_S #define __pyx_n_s_Sequence __pyx_mstate_global->__pyx_n_s_Sequence #define __pyx_kp_s_Step_may_not_be_zero_axis_d __pyx_mstate_global->__pyx_kp_s_Step_may_not_be_zero_axis_d +#define __pyx_n_s_SymBufReader __pyx_mstate_global->__pyx_n_s_SymBufReader +#define __pyx_n_s_SymBufReader___reduce_cython __pyx_mstate_global->__pyx_n_s_SymBufReader___reduce_cython +#define __pyx_n_s_SymBufReader___setstate_cython __pyx_mstate_global->__pyx_n_s_SymBufReader___setstate_cython +#define __pyx_n_s_SymBufReader_fileno __pyx_mstate_global->__pyx_n_s_SymBufReader_fileno +#define __pyx_n_s_SymBufReader_read __pyx_mstate_global->__pyx_n_s_SymBufReader_read +#define __pyx_n_s_SymBufReader_seek __pyx_mstate_global->__pyx_n_s_SymBufReader_seek +#define __pyx_n_s_SymBufReader_tell __pyx_mstate_global->__pyx_n_s_SymBufReader_tell #define __pyx_n_s_TypeError __pyx_mstate_global->__pyx_n_s_TypeError #define __pyx_kp_u_U __pyx_mstate_global->__pyx_kp_u_U #define __pyx_kp_s_Unable_to_convert_item_to_object __pyx_mstate_global->__pyx_kp_s_Unable_to_convert_item_to_object @@ -4766,11 +5079,12 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_kp_u_V_2 __pyx_mstate_global->__pyx_kp_u_V_2 #define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError #define __pyx_n_s_View_MemoryView __pyx_mstate_global->__pyx_n_s_View_MemoryView -#define __pyx_kp_b__11 __pyx_mstate_global->__pyx_kp_b__11 -#define __pyx_kp_u__11 __pyx_mstate_global->__pyx_kp_u__11 +#define __pyx_kp_b__12 __pyx_mstate_global->__pyx_kp_b__12 +#define __pyx_kp_b__13 __pyx_mstate_global->__pyx_kp_b__13 +#define __pyx_kp_u__13 __pyx_mstate_global->__pyx_kp_u__13 #define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 -#define __pyx_n_s__29 __pyx_mstate_global->__pyx_n_s__29 #define __pyx_n_s__3 __pyx_mstate_global->__pyx_n_s__3 +#define __pyx_n_s__51 __pyx_mstate_global->__pyx_n_s__51 #define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 #define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7 #define __pyx_n_s_abc __pyx_mstate_global->__pyx_n_s_abc @@ -4780,12 +5094,15 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_array __pyx_mstate_global->__pyx_n_s_array #define __pyx_n_s_asarray __pyx_mstate_global->__pyx_n_s_asarray #define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines +#define __pyx_n_s_available __pyx_mstate_global->__pyx_n_s_available #define __pyx_n_s_base __pyx_mstate_global->__pyx_n_s_base #define __pyx_n_u_big __pyx_mstate_global->__pyx_n_u_big #define __pyx_n_s_bit_count __pyx_mstate_global->__pyx_n_s_bit_count #define __pyx_n_s_bit_offset __pyx_mstate_global->__pyx_n_s_bit_offset #define __pyx_n_s_bit_stream __pyx_mstate_global->__pyx_n_s_bit_stream +#define __pyx_n_u_bom __pyx_mstate_global->__pyx_n_u_bom #define __pyx_n_s_buf __pyx_mstate_global->__pyx_n_s_buf +#define __pyx_n_s_buf_end __pyx_mstate_global->__pyx_n_s_buf_end #define __pyx_n_s_byteOffset __pyx_mstate_global->__pyx_n_s_byteOffset #define __pyx_n_s_byte_length __pyx_mstate_global->__pyx_n_s_byte_length #define __pyx_n_s_byteorder __pyx_mstate_global->__pyx_n_s_byteorder @@ -4807,20 +5124,26 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_kp_s_contiguous_and_direct __pyx_mstate_global->__pyx_kp_s_contiguous_and_direct #define __pyx_kp_s_contiguous_and_indirect __pyx_mstate_global->__pyx_kp_s_contiguous_and_indirect #define __pyx_n_s_count __pyx_mstate_global->__pyx_n_s_count +#define __pyx_n_s_data __pyx_mstate_global->__pyx_n_s_data #define __pyx_n_s_dataRead __pyx_mstate_global->__pyx_n_s_dataRead #define __pyx_kp_s_dataRead_pyx __pyx_mstate_global->__pyx_kp_s_dataRead_pyx #define __pyx_n_s_data_block_length __pyx_mstate_global->__pyx_n_s_data_block_length #define __pyx_n_s_data_format __pyx_mstate_global->__pyx_n_s_data_format #define __pyx_n_s_decode __pyx_mstate_global->__pyx_n_s_decode #define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict +#define __pyx_n_s_dict_2 __pyx_mstate_global->__pyx_n_s_dict_2 #define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable #define __pyx_n_s_dtype __pyx_mstate_global->__pyx_n_s_dtype #define __pyx_n_s_dtype_is_object __pyx_mstate_global->__pyx_n_s_dtype_is_object #define __pyx_n_s_empty __pyx_mstate_global->__pyx_n_s_empty #define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable #define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode +#define __pyx_n_s_end __pyx_mstate_global->__pyx_n_s_end #define __pyx_n_s_enumerate __pyx_mstate_global->__pyx_n_s_enumerate #define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error +#define __pyx_n_s_errors __pyx_mstate_global->__pyx_n_s_errors +#define __pyx_n_s_fid __pyx_mstate_global->__pyx_n_s_fid +#define __pyx_n_s_fileno __pyx_mstate_global->__pyx_n_s_fileno #define __pyx_n_s_flags __pyx_mstate_global->__pyx_n_s_flags #define __pyx_n_s_float16 __pyx_mstate_global->__pyx_n_s_float16 #define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format @@ -4831,6 +5154,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate #define __pyx_kp_u_got __pyx_mstate_global->__pyx_kp_u_got #define __pyx_kp_u_got_differing_extents_in_dimensi __pyx_mstate_global->__pyx_kp_u_got_differing_extents_in_dimensi +#define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i #define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id #define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import #define __pyx_n_s_index __pyx_mstate_global->__pyx_n_s_index @@ -4846,6 +5170,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_max_len __pyx_mstate_global->__pyx_n_s_max_len #define __pyx_n_s_memview __pyx_mstate_global->__pyx_n_s_memview #define __pyx_n_s_mode __pyx_mstate_global->__pyx_n_s_mode +#define __pyx_n_s_n __pyx_mstate_global->__pyx_n_s_n #define __pyx_n_s_nBytes_aligned __pyx_mstate_global->__pyx_n_s_nBytes_aligned #define __pyx_n_s_n_bytes __pyx_mstate_global->__pyx_n_s_n_bytes #define __pyx_n_s_n_records __pyx_mstate_global->__pyx_n_s_n_records @@ -4862,10 +5187,13 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_kp_u_numpy__core_umath_failed_to_impo __pyx_mstate_global->__pyx_kp_u_numpy__core_umath_failed_to_impo #define __pyx_n_s_numpy_format __pyx_mstate_global->__pyx_n_s_numpy_format #define __pyx_n_s_obj __pyx_mstate_global->__pyx_n_s_obj +#define __pyx_n_s_offset __pyx_mstate_global->__pyx_n_s_offset +#define __pyx_n_s_offsets_array __pyx_mstate_global->__pyx_n_s_offsets_array #define __pyx_n_s_order __pyx_mstate_global->__pyx_n_s_order #define __pyx_n_s_pack __pyx_mstate_global->__pyx_n_s_pack #define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle #define __pyx_n_s_pointer __pyx_mstate_global->__pyx_n_s_pointer +#define __pyx_n_s_pos __pyx_mstate_global->__pyx_n_s_pos #define __pyx_n_s_pos_byte_beg __pyx_mstate_global->__pyx_n_s_pos_byte_beg #define __pyx_n_s_pos_byte_end __pyx_mstate_global->__pyx_n_s_pos_byte_end #define __pyx_n_s_position __pyx_mstate_global->__pyx_n_s_position @@ -4875,8 +5203,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state #define __pyx_n_s_pyx_type __pyx_mstate_global->__pyx_n_s_pyx_type #define __pyx_n_s_pyx_unpickle_Enum __pyx_mstate_global->__pyx_n_s_pyx_unpickle_Enum +#define __pyx_n_s_pyx_unpickle_SymBufReader __pyx_mstate_global->__pyx_n_s_pyx_unpickle_SymBufReader #define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable #define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range +#define __pyx_n_s_read __pyx_mstate_global->__pyx_n_s_read #define __pyx_n_s_rec __pyx_mstate_global->__pyx_n_s_rec #define __pyx_n_s_record __pyx_mstate_global->__pyx_n_s_record #define __pyx_n_u_record __pyx_mstate_global->__pyx_n_u_record @@ -4892,19 +5222,24 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython #define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex #define __pyx_n_s_register __pyx_mstate_global->__pyx_n_s_register +#define __pyx_n_u_replace __pyx_mstate_global->__pyx_n_u_replace #define __pyx_n_s_rjust __pyx_mstate_global->__pyx_n_s_rjust #define __pyx_n_s_rstrip __pyx_mstate_global->__pyx_n_s_rstrip #define __pyx_n_s_sd_block __pyx_mstate_global->__pyx_n_s_sd_block #define __pyx_n_s_sd_block_length __pyx_mstate_global->__pyx_n_s_sd_block_length #define __pyx_n_s_sd_data_read __pyx_mstate_global->__pyx_n_s_sd_data_read +#define __pyx_n_s_seek __pyx_mstate_global->__pyx_n_s_seek +#define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self #define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate #define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython #define __pyx_n_s_shape __pyx_mstate_global->__pyx_n_s_shape #define __pyx_n_s_signal_data_type __pyx_mstate_global->__pyx_n_s_signal_data_type #define __pyx_n_s_size __pyx_mstate_global->__pyx_n_s_size +#define __pyx_n_s_sizes_array __pyx_mstate_global->__pyx_n_s_sizes_array #define __pyx_n_s_sorted_data_read __pyx_mstate_global->__pyx_n_s_sorted_data_read #define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec #define __pyx_n_s_start __pyx_mstate_global->__pyx_n_s_start +#define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state #define __pyx_n_s_step __pyx_mstate_global->__pyx_n_s_step #define __pyx_n_s_stop __pyx_mstate_global->__pyx_n_s_stop #define __pyx_kp_s_strided_and_direct __pyx_mstate_global->__pyx_kp_s_strided_and_direct @@ -4914,6 +5249,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_struct __pyx_mstate_global->__pyx_n_s_struct #define __pyx_n_s_swap_flag __pyx_mstate_global->__pyx_n_s_swap_flag #define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys +#define __pyx_n_s_tell __pyx_mstate_global->__pyx_n_s_tell #define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test #define __pyx_n_s_tmp __pyx_mstate_global->__pyx_n_s_tmp #define __pyx_n_s_uint16 __pyx_mstate_global->__pyx_n_s_uint16 @@ -4922,13 +5258,19 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_unpack __pyx_mstate_global->__pyx_n_s_unpack #define __pyx_n_s_unsorted_data_read4 __pyx_mstate_global->__pyx_n_s_unsorted_data_read4 #define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update +#define __pyx_n_s_use_setstate __pyx_mstate_global->__pyx_n_s_use_setstate #define __pyx_kp_u_utf_16 __pyx_mstate_global->__pyx_kp_u_utf_16 #define __pyx_kp_u_utf_16_2 __pyx_mstate_global->__pyx_kp_u_utf_16_2 +#define __pyx_kp_u_utf_16_be __pyx_mstate_global->__pyx_kp_u_utf_16_be +#define __pyx_kp_u_utf_16_le __pyx_mstate_global->__pyx_kp_u_utf_16_le #define __pyx_kp_u_utf_8 __pyx_mstate_global->__pyx_kp_u_utf_8 #define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values +#define __pyx_n_s_vd_block __pyx_mstate_global->__pyx_n_s_vd_block +#define __pyx_n_s_vd_data_read __pyx_mstate_global->__pyx_n_s_vd_data_read #define __pyx_n_s_version_info __pyx_mstate_global->__pyx_n_s_version_info #define __pyx_n_s_view __pyx_mstate_global->__pyx_n_s_view #define __pyx_n_s_vlsd_len __pyx_mstate_global->__pyx_n_s_vlsd_len +#define __pyx_n_s_whence __pyx_mstate_global->__pyx_n_s_whence #define __pyx_n_s_zeros __pyx_mstate_global->__pyx_n_s_zeros #define __pyx_int_0 __pyx_mstate_global->__pyx_int_0 #define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 @@ -4939,17 +5281,25 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_int_8 __pyx_mstate_global->__pyx_int_8 #define __pyx_int_9 __pyx_mstate_global->__pyx_int_9 #define __pyx_int_33 __pyx_mstate_global->__pyx_int_33 +#define __pyx_int_187 __pyx_mstate_global->__pyx_int_187 +#define __pyx_int_191 __pyx_mstate_global->__pyx_int_191 +#define __pyx_int_239 __pyx_mstate_global->__pyx_int_239 +#define __pyx_int_254 __pyx_mstate_global->__pyx_int_254 +#define __pyx_int_255 __pyx_mstate_global->__pyx_int_255 +#define __pyx_int_65536 __pyx_mstate_global->__pyx_int_65536 +#define __pyx_int_55633519 __pyx_mstate_global->__pyx_int_55633519 #define __pyx_int_112105877 __pyx_mstate_global->__pyx_int_112105877 +#define __pyx_int_120882827 __pyx_mstate_global->__pyx_int_120882827 #define __pyx_int_136983863 __pyx_mstate_global->__pyx_int_136983863 #define __pyx_int_184977713 __pyx_mstate_global->__pyx_int_184977713 +#define __pyx_int_218071849 __pyx_mstate_global->__pyx_int_218071849 #define __pyx_int_neg_1 __pyx_mstate_global->__pyx_int_neg_1 #define __pyx_slice__5 __pyx_mstate_global->__pyx_slice__5 #define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4 #define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8 #define __pyx_tuple__9 __pyx_mstate_global->__pyx_tuple__9 #define __pyx_tuple__10 __pyx_mstate_global->__pyx_tuple__10 -#define __pyx_tuple__12 __pyx_mstate_global->__pyx_tuple__12 -#define __pyx_tuple__13 __pyx_mstate_global->__pyx_tuple__13 +#define __pyx_tuple__11 __pyx_mstate_global->__pyx_tuple__11 #define __pyx_tuple__14 __pyx_mstate_global->__pyx_tuple__14 #define __pyx_tuple__15 __pyx_mstate_global->__pyx_tuple__15 #define __pyx_tuple__16 __pyx_mstate_global->__pyx_tuple__16 @@ -4958,15 +5308,376 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_tuple__19 __pyx_mstate_global->__pyx_tuple__19 #define __pyx_tuple__20 __pyx_mstate_global->__pyx_tuple__20 #define __pyx_tuple__21 __pyx_mstate_global->__pyx_tuple__21 +#define __pyx_tuple__22 __pyx_mstate_global->__pyx_tuple__22 #define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23 +#define __pyx_tuple__24 __pyx_mstate_global->__pyx_tuple__24 #define __pyx_tuple__25 __pyx_mstate_global->__pyx_tuple__25 +#define __pyx_tuple__26 __pyx_mstate_global->__pyx_tuple__26 #define __pyx_tuple__27 __pyx_mstate_global->__pyx_tuple__27 -#define __pyx_codeobj__22 __pyx_mstate_global->__pyx_codeobj__22 -#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24 -#define __pyx_codeobj__26 __pyx_mstate_global->__pyx_codeobj__26 -#define __pyx_codeobj__28 __pyx_mstate_global->__pyx_codeobj__28 +#define __pyx_tuple__28 __pyx_mstate_global->__pyx_tuple__28 +#define __pyx_tuple__30 __pyx_mstate_global->__pyx_tuple__30 +#define __pyx_tuple__32 __pyx_mstate_global->__pyx_tuple__32 +#define __pyx_tuple__33 __pyx_mstate_global->__pyx_tuple__33 +#define __pyx_tuple__35 __pyx_mstate_global->__pyx_tuple__35 +#define __pyx_tuple__38 __pyx_mstate_global->__pyx_tuple__38 +#define __pyx_tuple__40 __pyx_mstate_global->__pyx_tuple__40 +#define __pyx_tuple__42 __pyx_mstate_global->__pyx_tuple__42 +#define __pyx_tuple__44 __pyx_mstate_global->__pyx_tuple__44 +#define __pyx_tuple__46 __pyx_mstate_global->__pyx_tuple__46 +#define __pyx_tuple__48 __pyx_mstate_global->__pyx_tuple__48 +#define __pyx_codeobj__29 __pyx_mstate_global->__pyx_codeobj__29 +#define __pyx_codeobj__31 __pyx_mstate_global->__pyx_codeobj__31 +#define __pyx_codeobj__34 __pyx_mstate_global->__pyx_codeobj__34 +#define __pyx_codeobj__36 __pyx_mstate_global->__pyx_codeobj__36 +#define __pyx_codeobj__37 __pyx_mstate_global->__pyx_codeobj__37 +#define __pyx_codeobj__39 __pyx_mstate_global->__pyx_codeobj__39 +#define __pyx_codeobj__41 __pyx_mstate_global->__pyx_codeobj__41 +#define __pyx_codeobj__43 __pyx_mstate_global->__pyx_codeobj__43 +#define __pyx_codeobj__45 __pyx_mstate_global->__pyx_codeobj__45 +#define __pyx_codeobj__47 __pyx_mstate_global->__pyx_codeobj__47 +#define __pyx_codeobj__49 __pyx_mstate_global->__pyx_codeobj__49 +#define __pyx_codeobj__50 __pyx_mstate_global->__pyx_codeobj__50 /* #### Code section: module_code ### */ +/* "carray.from_py":79 + * + * @cname("__Pyx_carray_from_py_unsigned_char") + * cdef int __Pyx_carray_from_py_unsigned_char(object o, base_type *v, Py_ssize_t length) except -1: # <<<<<<<<<<<<<< + * cdef Py_ssize_t i = length + * try: + */ + +static int __Pyx_carray_from_py_unsigned_char(PyObject *__pyx_v_o, unsigned char *__pyx_v_v, Py_ssize_t __pyx_v_length) { + Py_ssize_t __pyx_v_i; + PyObject *__pyx_v_item = NULL; + int __pyx_r; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + Py_ssize_t __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + PyObject *__pyx_t_7 = NULL; + Py_ssize_t __pyx_t_8; + PyObject *(*__pyx_t_9)(PyObject *); + PyObject *__pyx_t_10 = NULL; + unsigned char __pyx_t_11; + char const *__pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__Pyx_carray_from_py_unsigned_char", 1); + + /* "carray.from_py":80 + * @cname("__Pyx_carray_from_py_unsigned_char") + * cdef int __Pyx_carray_from_py_unsigned_char(object o, base_type *v, Py_ssize_t length) except -1: + * cdef Py_ssize_t i = length # <<<<<<<<<<<<<< + * try: + * i = len(o) + */ + __pyx_v_i = __pyx_v_length; + + /* "carray.from_py":81 + * cdef int __Pyx_carray_from_py_unsigned_char(object o, base_type *v, Py_ssize_t length) except -1: + * cdef Py_ssize_t i = length + * try: # <<<<<<<<<<<<<< + * i = len(o) + * except (TypeError, OverflowError): + */ + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); + __Pyx_XGOTREF(__pyx_t_1); + __Pyx_XGOTREF(__pyx_t_2); + __Pyx_XGOTREF(__pyx_t_3); + /*try:*/ { + + /* "carray.from_py":82 + * cdef Py_ssize_t i = length + * try: + * i = len(o) # <<<<<<<<<<<<<< + * except (TypeError, OverflowError): + * pass + */ + __pyx_t_4 = PyObject_Length(__pyx_v_o); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 82, __pyx_L3_error) + __pyx_v_i = __pyx_t_4; + + /* "carray.from_py":81 + * cdef int __Pyx_carray_from_py_unsigned_char(object o, base_type *v, Py_ssize_t length) except -1: + * cdef Py_ssize_t i = length + * try: # <<<<<<<<<<<<<< + * i = len(o) + * except (TypeError, OverflowError): + */ + } + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + goto __pyx_L8_try_end; + __pyx_L3_error:; + + /* "carray.from_py":83 + * try: + * i = len(o) + * except (TypeError, OverflowError): # <<<<<<<<<<<<<< + * pass + * if i == length: + */ + __pyx_t_5 = __Pyx_PyErr_ExceptionMatches2(__pyx_builtin_TypeError, __pyx_builtin_OverflowError); + if (__pyx_t_5) { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L4_exception_handled; + } + goto __pyx_L5_except_error; + + /* "carray.from_py":81 + * cdef int __Pyx_carray_from_py_unsigned_char(object o, base_type *v, Py_ssize_t length) except -1: + * cdef Py_ssize_t i = length + * try: # <<<<<<<<<<<<<< + * i = len(o) + * except (TypeError, OverflowError): + */ + __pyx_L5_except_error:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + goto __pyx_L1_error; + __pyx_L4_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_1); + __Pyx_XGIVEREF(__pyx_t_2); + __Pyx_XGIVEREF(__pyx_t_3); + __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); + __pyx_L8_try_end:; + } + + /* "carray.from_py":85 + * except (TypeError, OverflowError): + * pass + * if i == length: # <<<<<<<<<<<<<< + * for i, item in enumerate(o): + * if i >= length: + */ + __pyx_t_6 = (__pyx_v_i == __pyx_v_length); + if (__pyx_t_6) { + + /* "carray.from_py":86 + * pass + * if i == length: + * for i, item in enumerate(o): # <<<<<<<<<<<<<< + * if i >= length: + * break + */ + __pyx_t_4 = 0; + if (likely(PyList_CheckExact(__pyx_v_o)) || PyTuple_CheckExact(__pyx_v_o)) { + __pyx_t_7 = __pyx_v_o; __Pyx_INCREF(__pyx_t_7); + __pyx_t_8 = 0; + __pyx_t_9 = NULL; + } else { + __pyx_t_8 = -1; __pyx_t_7 = PyObject_GetIter(__pyx_v_o); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_9 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 86, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_9)) { + if (likely(PyList_CheckExact(__pyx_t_7))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_7); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 86, __pyx_L1_error) + #endif + if (__pyx_t_8 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_10 = PyList_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(1, 86, __pyx_L1_error) + #else + __pyx_t_10 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_7); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(1, 86, __pyx_L1_error) + #endif + if (__pyx_t_8 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_10 = PyTuple_GET_ITEM(__pyx_t_7, __pyx_t_8); __Pyx_INCREF(__pyx_t_10); __pyx_t_8++; if (unlikely((0 < 0))) __PYX_ERR(1, 86, __pyx_L1_error) + #else + __pyx_t_10 = __Pyx_PySequence_ITEM(__pyx_t_7, __pyx_t_8); __pyx_t_8++; if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 86, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_10); + #endif + } + } else { + __pyx_t_10 = __pyx_t_9(__pyx_t_7); + if (unlikely(!__pyx_t_10)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(1, 86, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_10); + } + __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_10); + __pyx_t_10 = 0; + __pyx_v_i = __pyx_t_4; + __pyx_t_4 = (__pyx_t_4 + 1); + + /* "carray.from_py":87 + * if i == length: + * for i, item in enumerate(o): + * if i >= length: # <<<<<<<<<<<<<< + * break + * v[i] = item + */ + __pyx_t_6 = (__pyx_v_i >= __pyx_v_length); + if (__pyx_t_6) { + + /* "carray.from_py":88 + * for i, item in enumerate(o): + * if i >= length: + * break # <<<<<<<<<<<<<< + * v[i] = item + * else: + */ + goto __pyx_L11_break; + + /* "carray.from_py":87 + * if i == length: + * for i, item in enumerate(o): + * if i >= length: # <<<<<<<<<<<<<< + * break + * v[i] = item + */ + } + + /* "carray.from_py":89 + * if i >= length: + * break + * v[i] = item # <<<<<<<<<<<<<< + * else: + * i += 1 # convert index to length + */ + __pyx_t_11 = __Pyx_PyInt_As_unsigned_char(__pyx_v_item); if (unlikely((__pyx_t_11 == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(1, 89, __pyx_L1_error) + (__pyx_v_v[__pyx_v_i]) = __pyx_t_11; + + /* "carray.from_py":86 + * pass + * if i == length: + * for i, item in enumerate(o): # <<<<<<<<<<<<<< + * if i >= length: + * break + */ + } + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L13_for_else; + __pyx_L11_break:; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + goto __pyx_L14_for_end; + /*else*/ { + __pyx_L13_for_else:; + + /* "carray.from_py":91 + * v[i] = item + * else: + * i += 1 # convert index to length # <<<<<<<<<<<<<< + * if i == length: + * return 0 + */ + __pyx_v_i = (__pyx_v_i + 1); + + /* "carray.from_py":92 + * else: + * i += 1 # convert index to length + * if i == length: # <<<<<<<<<<<<<< + * return 0 + * + */ + __pyx_t_6 = (__pyx_v_i == __pyx_v_length); + if (__pyx_t_6) { + + /* "carray.from_py":93 + * i += 1 # convert index to length + * if i == length: + * return 0 # <<<<<<<<<<<<<< + * + * PyErr_Format( + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "carray.from_py":92 + * else: + * i += 1 # convert index to length + * if i == length: # <<<<<<<<<<<<<< + * return 0 + * + */ + } + } + __pyx_L14_for_end:; + + /* "carray.from_py":85 + * except (TypeError, OverflowError): + * pass + * if i == length: # <<<<<<<<<<<<<< + * for i, item in enumerate(o): + * if i >= length: + */ + } + + /* "carray.from_py":98 + * IndexError, + * ("too many values found during array assignment, expected %zd" + * if i >= length else # <<<<<<<<<<<<<< + * "not enough values found during array assignment, expected %zd, got %zd"), + * length, i) + */ + __pyx_t_6 = (__pyx_v_i >= __pyx_v_length); + if (__pyx_t_6) { + __pyx_t_12 = ((char const *)"too many values found during array assignment, expected %zd"); + } else { + __pyx_t_12 = ((char const *)"not enough values found during array assignment, expected %zd, got %zd"); + } + + /* "carray.from_py":95 + * return 0 + * + * PyErr_Format( # <<<<<<<<<<<<<< + * IndexError, + * ("too many values found during array assignment, expected %zd" + */ + __pyx_t_7 = PyErr_Format(__pyx_builtin_IndexError, __pyx_t_12, __pyx_v_length, __pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 95, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + + /* "carray.from_py":79 + * + * @cname("__Pyx_carray_from_py_unsigned_char") + * cdef int __Pyx_carray_from_py_unsigned_char(object o, base_type *v, Py_ssize_t length) except -1: # <<<<<<<<<<<<<< + * cdef Py_ssize_t i = length + * try: + */ + + /* function exit code */ + __pyx_r = 0; + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_10); + __Pyx_AddTraceback("carray.from_py.__Pyx_carray_from_py_unsigned_char", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_item); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + /* "View.MemoryView":131 * cdef bint dtype_is_object * @@ -20285,52 +20996,403 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec return __pyx_r; } -/* "dataRead.pyx":12 - * cimport cython +/* "dataRead.pyx":37 + * cdef Py_ssize_t _pos # logical file position (cursor) * - * @cython.boundscheck(False) # <<<<<<<<<<<<<< - * @cython.wraparound(False) - * def sorted_data_read(bytes tmp, unsigned short bit_count, + * def __init__(self, fid): # <<<<<<<<<<<<<< + * self._fid = fid + * self._buf_start = 0 */ /* Python wrapper */ -static PyObject *__pyx_pw_8dataRead_1sorted_data_read(PyObject *__pyx_self, +static int __pyx_pw_8dataRead_12SymBufReader_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static int __pyx_pw_8dataRead_12SymBufReader_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_fid = 0; + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1; + #endif + __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fid,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fid)) != 0)) { + (void)__Pyx_Arg_NewRef_VARARGS(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 37, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0); + } + __pyx_v_fid = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 37, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.SymBufReader.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return -1; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8dataRead_12SymBufReader___init__(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v_self), __pyx_v_fid); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static int __pyx_pf_8dataRead_12SymBufReader___init__(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, PyObject *__pyx_v_fid) { + int __pyx_r; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 1); + + /* "dataRead.pyx":38 + * + * def __init__(self, fid): + * self._fid = fid # <<<<<<<<<<<<<< + * self._buf_start = 0 + * self._buf_len = 0 + */ + __Pyx_INCREF(__pyx_v_fid); + __Pyx_GIVEREF(__pyx_v_fid); + __Pyx_GOTREF(__pyx_v_self->_fid); + __Pyx_DECREF(__pyx_v_self->_fid); + __pyx_v_self->_fid = __pyx_v_fid; + + /* "dataRead.pyx":39 + * def __init__(self, fid): + * self._fid = fid + * self._buf_start = 0 # <<<<<<<<<<<<<< + * self._buf_len = 0 + * self._pos = 0 + */ + __pyx_v_self->_buf_start = 0; + + /* "dataRead.pyx":40 + * self._fid = fid + * self._buf_start = 0 + * self._buf_len = 0 # <<<<<<<<<<<<<< + * self._pos = 0 + * + */ + __pyx_v_self->_buf_len = 0; + + /* "dataRead.pyx":41 + * self._buf_start = 0 + * self._buf_len = 0 + * self._pos = 0 # <<<<<<<<<<<<<< + * + * cdef int _fill(self, Py_ssize_t pos) except -1: + */ + __pyx_v_self->_pos = 0; + + /* "dataRead.pyx":37 + * cdef Py_ssize_t _pos # logical file position (cursor) + * + * def __init__(self, fid): # <<<<<<<<<<<<<< + * self._fid = fid + * self._buf_start = 0 + */ + + /* function exit code */ + __pyx_r = 0; + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":43 + * self._pos = 0 + * + * cdef int _fill(self, Py_ssize_t pos) except -1: # <<<<<<<<<<<<<< + * """Refill _buf centred on pos, reading from the underlying file.""" + * cdef Py_ssize_t start = pos - (SYM_BUF_SIZE >> 1) + */ + +static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, Py_ssize_t __pyx_v_pos) { + Py_ssize_t __pyx_v_start; + PyObject *__pyx_v_raw = 0; + Py_ssize_t __pyx_v_n; + int __pyx_r; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + unsigned int __pyx_t_6; + Py_ssize_t __pyx_t_7; + unsigned char const *__pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_fill", 1); + + /* "dataRead.pyx":45 + * cdef int _fill(self, Py_ssize_t pos) except -1: + * """Refill _buf centred on pos, reading from the underlying file.""" + * cdef Py_ssize_t start = pos - (SYM_BUF_SIZE >> 1) # <<<<<<<<<<<<<< + * cdef bytes raw + * cdef Py_ssize_t n + */ + __pyx_v_start = (__pyx_v_pos - 0x8000); + + /* "dataRead.pyx":48 + * cdef bytes raw + * cdef Py_ssize_t n + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * self._fid.seek(start) + */ + __pyx_t_1 = (__pyx_v_start < 0); + if (__pyx_t_1) { + + /* "dataRead.pyx":49 + * cdef Py_ssize_t n + * if start < 0: + * start = 0 # <<<<<<<<<<<<<< + * self._fid.seek(start) + * raw = self._fid.read(SYM_BUF_SIZE) + */ + __pyx_v_start = 0; + + /* "dataRead.pyx":48 + * cdef bytes raw + * cdef Py_ssize_t n + * if start < 0: # <<<<<<<<<<<<<< + * start = 0 + * self._fid.seek(start) + */ + } + + /* "dataRead.pyx":50 + * if start < 0: + * start = 0 + * self._fid.seek(start) # <<<<<<<<<<<<<< + * raw = self._fid.read(SYM_BUF_SIZE) + * n = len(raw) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_seek); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "dataRead.pyx":51 + * start = 0 + * self._fid.seek(start) + * raw = self._fid.read(SYM_BUF_SIZE) # <<<<<<<<<<<<<< + * n = len(raw) + * memcpy(self._buf, raw, n) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_6 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_6 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_int_65536}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(0, 51, __pyx_L1_error) + __pyx_v_raw = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":52 + * self._fid.seek(start) + * raw = self._fid.read(SYM_BUF_SIZE) + * n = len(raw) # <<<<<<<<<<<<<< + * memcpy(self._buf, raw, n) + * self._buf_start = start + */ + if (unlikely(__pyx_v_raw == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(0, 52, __pyx_L1_error) + } + __pyx_t_7 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 52, __pyx_L1_error) + __pyx_v_n = __pyx_t_7; + + /* "dataRead.pyx":53 + * raw = self._fid.read(SYM_BUF_SIZE) + * n = len(raw) + * memcpy(self._buf, raw, n) # <<<<<<<<<<<<<< + * self._buf_start = start + * self._buf_len = n + */ + if (unlikely(__pyx_v_raw == Py_None)) { + PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); + __PYX_ERR(0, 53, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_PyBytes_AsUString(__pyx_v_raw); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 53, __pyx_L1_error) + (void)(memcpy(__pyx_v_self->_buf, ((unsigned char const *)__pyx_t_8), __pyx_v_n)); + + /* "dataRead.pyx":54 + * n = len(raw) + * memcpy(self._buf, raw, n) + * self._buf_start = start # <<<<<<<<<<<<<< + * self._buf_len = n + * return 0 + */ + __pyx_v_self->_buf_start = __pyx_v_start; + + /* "dataRead.pyx":55 + * memcpy(self._buf, raw, n) + * self._buf_start = start + * self._buf_len = n # <<<<<<<<<<<<<< + * return 0 + * + */ + __pyx_v_self->_buf_len = __pyx_v_n; + + /* "dataRead.pyx":56 + * self._buf_start = start + * self._buf_len = n + * return 0 # <<<<<<<<<<<<<< + * + * def seek(self, Py_ssize_t pos, int whence=0): + */ + __pyx_r = 0; + goto __pyx_L0; + + /* "dataRead.pyx":43 + * self._pos = 0 + * + * cdef int _fill(self, Py_ssize_t pos) except -1: # <<<<<<<<<<<<<< + * """Refill _buf centred on pos, reading from the underlying file.""" + * cdef Py_ssize_t start = pos - (SYM_BUF_SIZE >> 1) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("dataRead.SymBufReader._fill", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = -1; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_raw); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":58 + * return 0 + * + * def seek(self, Py_ssize_t pos, int whence=0): # <<<<<<<<<<<<<< + * """Update logical cursor; does NOT touch the underlying file.""" + * if whence == 0: + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_12SymBufReader_3seek(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -PyDoc_STRVAR(__pyx_doc_8dataRead_sorted_data_read, "dataRead function to read in cython a channel from a byte stream\n\n Parameters\n ------------\n tmp : bytes\n byte stream\n bit_count : unsigned short\n number of bit taken by the channel in the record\n signal_data_type : unsigned short\n int to describe data type\n record_format : string\n basic numpy dtype description of data type, used to create\n returned numpy ndarray\n number_of_records : unsigned long long\n number of records in byte stream\n record_byte_size : unsigned long\n number of bytes taken by one record repeated in byte stream\n bit_offset : unsigned char\n bit offset of data in C aligned bytes\n pos_byte_beg : unsigned long\n beginning byte position of channel in record\n n_bytes : unsigned long\n bytes length of channel in record\n array : boolean\n reads an array, not a vector\n\n Returns\n -------\n ndarray of type record_format with number_of_records records.\n Byte order is swapped if necessary to match machine byte order before bits offset and masking\n "); -static PyMethodDef __pyx_mdef_8dataRead_1sorted_data_read = {"sorted_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_1sorted_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_sorted_data_read}; -static PyObject *__pyx_pw_8dataRead_1sorted_data_read(PyObject *__pyx_self, +PyDoc_STRVAR(__pyx_doc_8dataRead_12SymBufReader_2seek, "Update logical cursor; does NOT touch the underlying file."); +static PyMethodDef __pyx_mdef_8dataRead_12SymBufReader_3seek = {"seek", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_3seek, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_12SymBufReader_2seek}; +static PyObject *__pyx_pw_8dataRead_12SymBufReader_3seek(PyObject *__pyx_v_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { - PyObject *__pyx_v_tmp = 0; - unsigned short __pyx_v_bit_count; - unsigned short __pyx_v_signal_data_type; - PyObject *__pyx_v_record_format = 0; - unsigned PY_LONG_LONG __pyx_v_number_of_records; - unsigned long __pyx_v_record_byte_size; - unsigned char __pyx_v_bit_offset; - unsigned long __pyx_v_pos_byte_beg; - unsigned long __pyx_v_n_bytes; - PyObject *__pyx_v_array = 0; + Py_ssize_t __pyx_v_pos; + int __pyx_v_whence; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; + PyObject* values[2] = {0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("sorted_data_read (wrapper)", 0); + __Pyx_RefNannySetupContext("seek (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); @@ -20340,26 +21402,10 @@ PyObject *__pyx_args, PyObject *__pyx_kwds #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tmp,&__pyx_n_s_bit_count,&__pyx_n_s_signal_data_type,&__pyx_n_s_record_format,&__pyx_n_s_number_of_records,&__pyx_n_s_record_byte_size,&__pyx_n_s_bit_offset,&__pyx_n_s_pos_byte_beg,&__pyx_n_s_n_bytes,&__pyx_n_s_array,0}; + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pos,&__pyx_n_s_whence,0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { - case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - CYTHON_FALLTHROUGH; case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); CYTHON_FALLTHROUGH; case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); @@ -20370,135 +21416,43 @@ PyObject *__pyx_args, PyObject *__pyx_kwds kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tmp)) != 0)) { + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pos)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_bit_count)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 1); __PYX_ERR(0, 12, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 2); __PYX_ERR(0, 12, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_format)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 3); __PYX_ERR(0, 12, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_number_of_records)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 4); __PYX_ERR(0, 12, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_byte_size)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[5]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 5); __PYX_ERR(0, 12, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_bit_offset)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[6]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 6); __PYX_ERR(0, 12, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pos_byte_beg)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[7]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 7); __PYX_ERR(0, 12, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_bytes)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[8]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 8); __PYX_ERR(0, 12, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_array)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[9]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 12, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 9); __PYX_ERR(0, 12, __pyx_L3_error) + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_whence); + if (value) { values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sorted_data_read") < 0)) __PYX_ERR(0, 12, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "seek") < 0)) __PYX_ERR(0, 58, __pyx_L3_error) } - } else if (unlikely(__pyx_nargs != 10)) { - goto __pyx_L5_argtuple_error; } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); - values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); - values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); - values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); - values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); + switch (__pyx_nargs) { + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_pos = __Pyx_PyIndex_AsSsize_t(values[0]); if (unlikely((__pyx_v_pos == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) + if (values[1]) { + __pyx_v_whence = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_whence == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) + } else { + __pyx_v_whence = ((int)0); } - __pyx_v_tmp = ((PyObject*)values[0]); - __pyx_v_bit_count = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_bit_count == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 14, __pyx_L3_error) - __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 15, __pyx_L3_error) - __pyx_v_record_format = ((PyObject*)values[3]); - __pyx_v_number_of_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_number_of_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 15, __pyx_L3_error) - __pyx_v_record_byte_size = __Pyx_PyInt_As_unsigned_long(values[5]); if (unlikely((__pyx_v_record_byte_size == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 16, __pyx_L3_error) - __pyx_v_bit_offset = __Pyx_PyInt_As_unsigned_char(values[6]); if (unlikely((__pyx_v_bit_offset == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 16, __pyx_L3_error) - __pyx_v_pos_byte_beg = __Pyx_PyInt_As_unsigned_long(values[7]); if (unlikely((__pyx_v_pos_byte_beg == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 17, __pyx_L3_error) - __pyx_v_n_bytes = __Pyx_PyInt_As_unsigned_long(values[8]); if (unlikely((__pyx_v_n_bytes == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 17, __pyx_L3_error) - __pyx_v_array = values[9]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, __pyx_nargs); __PYX_ERR(0, 12, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("seek", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 58, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -20508,19 +21462,13 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } - __Pyx_AddTraceback("dataRead.sorted_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.SymBufReader.seek", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 14, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_record_format), (&PyUnicode_Type), 1, "record_format", 1))) __PYX_ERR(0, 15, __pyx_L1_error) - __pyx_r = __pyx_pf_8dataRead_sorted_data_read(__pyx_self, __pyx_v_tmp, __pyx_v_bit_count, __pyx_v_signal_data_type, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_bit_offset, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_array); + __pyx_r = __pyx_pf_8dataRead_12SymBufReader_2seek(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v_self), __pyx_v_pos, __pyx_v_whence); /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; { Py_ssize_t __pyx_temp; for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { @@ -20531,564 +21479,2005 @@ PyObject *__pyx_args, PyObject *__pyx_kwds return __pyx_r; } -static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tmp, unsigned short __pyx_v_bit_count, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, PyObject *__pyx_v_array) { - char const *__pyx_v_bit_stream; - CYTHON_UNUSED long __pyx_v_swap_flag; +static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, Py_ssize_t __pyx_v_pos, int __pyx_v_whence) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - char *__pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - unsigned char __pyx_t_6; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + Py_ssize_t __pyx_t_5; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("sorted_data_read", 1); + __Pyx_RefNannySetupContext("seek", 1); - /* "dataRead.pyx":49 - * Byte order is swapped if necessary to match machine byte order before bits offset and masking - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< - * if not array: - * if 'V' in record_format or 'S' in record_format or record_format is None: + /* "dataRead.pyx":60 + * def seek(self, Py_ssize_t pos, int whence=0): + * """Update logical cursor; does NOT touch the underlying file.""" + * if whence == 0: # <<<<<<<<<<<<<< + * self._pos = pos + * elif whence == 1: */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 49, __pyx_L1_error) - __pyx_v_bit_stream = __pyx_t_1; + switch (__pyx_v_whence) { + case 0: - /* "dataRead.pyx":50 - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * if not array: # <<<<<<<<<<<<<< - * if 'V' in record_format or 'S' in record_format or record_format is None: - * return read_byte(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":61 + * """Update logical cursor; does NOT touch the underlying file.""" + * if whence == 0: + * self._pos = pos # <<<<<<<<<<<<<< + * elif whence == 1: + * self._pos += pos */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_array); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 50, __pyx_L1_error) - __pyx_t_3 = (!__pyx_t_2); - if (__pyx_t_3) { + __pyx_v_self->_pos = __pyx_v_pos; - /* "dataRead.pyx":51 - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * if not array: - * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + /* "dataRead.pyx":60 + * def seek(self, Py_ssize_t pos, int whence=0): + * """Update logical cursor; does NOT touch the underlying file.""" + * if whence == 0: # <<<<<<<<<<<<<< + * self._pos = pos + * elif whence == 1: */ - if (unlikely(__pyx_v_record_format == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 51, __pyx_L1_error) - } - __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_V, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 51, __pyx_L1_error) - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L5_bool_binop_done; - } - if (unlikely(__pyx_v_record_format == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 51, __pyx_L1_error) - } - __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_S, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 51, __pyx_L1_error) - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L5_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_record_format == ((PyObject*)Py_None)); - __pyx_t_3 = __pyx_t_2; - __pyx_L5_bool_binop_done:; - if (__pyx_t_3) { + break; + case 1: - /* "dataRead.pyx":52 - * if not array: - * if 'V' in record_format or 'S' in record_format or record_format is None: - * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float + /* "dataRead.pyx":63 + * self._pos = pos + * elif whence == 1: + * self._pos += pos # <<<<<<<<<<<<<< + * else: # whence == 2 (from end) + * self._fid.seek(0, 2) */ - __Pyx_XDECREF(__pyx_r); + __pyx_v_self->_pos = (__pyx_v_self->_pos + __pyx_v_pos); - /* "dataRead.pyx":53 - * if 'V' in record_format or 'S' in record_format or record_format is None: - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ + /* "dataRead.pyx":62 + * if whence == 0: + * self._pos = pos + * elif whence == 1: # <<<<<<<<<<<<<< + * self._pos += pos + * else: # whence == 2 (from end) */ - __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 52, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + break; + default: - /* "dataRead.pyx":51 - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * if not array: - * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + /* "dataRead.pyx":65 + * self._pos += pos + * else: # whence == 2 (from end) + * self._fid.seek(0, 2) # <<<<<<<<<<<<<< + * self._pos = self._fid.tell() + pos + * return self._pos */ - } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_seek); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __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; - /* "dataRead.pyx":54 - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":66 + * else: # whence == 2 (from end) + * self._fid.seek(0, 2) + * self._pos = self._fid.tell() + pos # <<<<<<<<<<<<<< + * return self._pos + * */ - switch (__pyx_v_signal_data_type) { - case 4: - case 5: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_tell); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_4 = 1; + } } - __pyx_t_5 = __pyx_t_2; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L8_bool_binop_done; + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __pyx_t_5 = (__pyx_v_n_bytes == 4); - __pyx_t_3 = __pyx_t_5; - __pyx_L8_bool_binop_done:; - if (__pyx_t_3) { + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_pos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_self->_pos = __pyx_t_5; + break; + } - /* "dataRead.pyx":55 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":67 + * self._fid.seek(0, 2) + * self._pos = self._fid.tell() + pos + * return self._pos # <<<<<<<<<<<<<< + * + * def tell(self): */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 55, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 55, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_5) { - goto __pyx_L12_next_or; - } else { - } - __pyx_t_5 = (__pyx_v_signal_data_type == 4); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L11_bool_binop_done; - } - __pyx_L12_next_or:; + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 67, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; - /* "dataRead.pyx":56 - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":58 + * return 0 + * + * def seek(self, Py_ssize_t pos, int whence=0): # <<<<<<<<<<<<<< + * """Update logical cursor; does NOT touch the underlying file.""" + * if whence == 0: */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 56, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L11_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_signal_data_type == 5); - __pyx_t_3 = __pyx_t_5; - __pyx_L11_bool_binop_done:; - /* "dataRead.pyx":55 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dataRead.SymBufReader.seek", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":69 + * return self._pos + * + * def tell(self): # <<<<<<<<<<<<<< + * return self._pos + * */ - if (__pyx_t_3) { - /* "dataRead.pyx":57 - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_12SymBufReader_5tell(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8dataRead_12SymBufReader_5tell = {"tell", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_5tell, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8dataRead_12SymBufReader_5tell(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("tell (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("tell", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "tell", 0))) return NULL; + __pyx_r = __pyx_pf_8dataRead_12SymBufReader_4tell(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_12SymBufReader_4tell(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("tell", 1); + + /* "dataRead.pyx":70 + * + * def tell(self): + * return self._pos # <<<<<<<<<<<<<< + * + * def read(self, Py_ssize_t n=-1): */ - __Pyx_XDECREF(__pyx_r); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_pos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; - /* "dataRead.pyx":58 - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_float(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":69 + * return self._pos + * + * def tell(self): # <<<<<<<<<<<<<< + * return self._pos + * */ - __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - /* "dataRead.pyx":55 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dataRead.SymBufReader.tell", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":72 + * return self._pos + * + * def read(self, Py_ssize_t n=-1): # <<<<<<<<<<<<<< + * """Return up to n bytes from the current position (or all if n<0).""" + * cdef Py_ssize_t pos = self._pos */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_12SymBufReader_7read(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8dataRead_12SymBufReader_6read, "Return up to n bytes from the current position (or all if n<0)."); +static PyMethodDef __pyx_mdef_8dataRead_12SymBufReader_7read = {"read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_7read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_12SymBufReader_6read}; +static PyObject *__pyx_pw_8dataRead_12SymBufReader_7read(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + Py_ssize_t __pyx_v_n; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("read (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (kw_args > 0) { + PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n); + if (value) { values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "read") < 0)) __PYX_ERR(0, 72, __pyx_L3_error) + } + } else { + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; } + } + if (values[0]) { + __pyx_v_n = __Pyx_PyIndex_AsSsize_t(values[0]); if (unlikely((__pyx_v_n == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error) + } else { + __pyx_v_n = ((Py_ssize_t)-1L); + } + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("read", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 72, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.SymBufReader.read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8dataRead_12SymBufReader_6read(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v_self), __pyx_v_n); - /* "dataRead.pyx":60 - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes - * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":61 - * else: # swap bytes - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ +static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, Py_ssize_t __pyx_v_n) { + Py_ssize_t __pyx_v_pos; + Py_ssize_t __pyx_v_buf_end; + Py_ssize_t __pyx_v_offset; + Py_ssize_t __pyx_v_available; + Py_ssize_t __pyx_v_end; + PyObject *__pyx_v_data = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + Py_ssize_t __pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read", 1); + + /* "dataRead.pyx":74 + * def read(self, Py_ssize_t n=-1): + * """Return up to n bytes from the current position (or all if n<0).""" + * cdef Py_ssize_t pos = self._pos # <<<<<<<<<<<<<< + * cdef Py_ssize_t buf_end, offset, available, end + * buf_end = self._buf_start + self._buf_len + */ + __pyx_t_1 = __pyx_v_self->_pos; + __pyx_v_pos = __pyx_t_1; + + /* "dataRead.pyx":76 + * cdef Py_ssize_t pos = self._pos + * cdef Py_ssize_t buf_end, offset, available, end + * buf_end = self._buf_start + self._buf_len # <<<<<<<<<<<<<< + * # Fast path: serve directly from buffer + * if self._buf_len > 0 and self._buf_start <= pos < buf_end: + */ + __pyx_v_buf_end = (__pyx_v_self->_buf_start + __pyx_v_self->_buf_len); + + /* "dataRead.pyx":78 + * buf_end = self._buf_start + self._buf_len + * # Fast path: serve directly from buffer + * if self._buf_len > 0 and self._buf_start <= pos < buf_end: # <<<<<<<<<<<<<< + * offset = pos - self._buf_start + * available = self._buf_len - offset + */ + __pyx_t_3 = (__pyx_v_self->_buf_len > 0); + if (__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_self->_buf_start <= __pyx_v_pos); + if (__pyx_t_3) { + __pyx_t_3 = (__pyx_v_pos < __pyx_v_buf_end); + } + __pyx_t_2 = __pyx_t_3; + __pyx_L4_bool_binop_done:; + if (__pyx_t_2) { + + /* "dataRead.pyx":79 + * # Fast path: serve directly from buffer + * if self._buf_len > 0 and self._buf_start <= pos < buf_end: + * offset = pos - self._buf_start # <<<<<<<<<<<<<< + * available = self._buf_len - offset + * if n < 0 or available >= n: */ - __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __pyx_v_offset = (__pyx_v_pos - __pyx_v_self->_buf_start); - /* "dataRead.pyx":54 - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":80 + * if self._buf_len > 0 and self._buf_start <= pos < buf_end: + * offset = pos - self._buf_start + * available = self._buf_len - offset # <<<<<<<<<<<<<< + * if n < 0 or available >= n: + * end = offset + (n if n >= 0 else available) */ - } + __pyx_v_available = (__pyx_v_self->_buf_len - __pyx_v_offset); - /* "dataRead.pyx":62 - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":81 + * offset = pos - self._buf_start + * available = self._buf_len - offset + * if n < 0 or available >= n: # <<<<<<<<<<<<<< + * end = offset + (n if n >= 0 else available) + * data = bytes(self._buf[offset:end]) */ - switch (__pyx_v_signal_data_type) { - case 4: - case 5: - __pyx_t_5 = 1; - break; - default: - __pyx_t_5 = 0; - break; - } - __pyx_t_2 = __pyx_t_5; - if (__pyx_t_2) { + __pyx_t_3 = (__pyx_v_n < 0); + if (!__pyx_t_3) { } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L15_bool_binop_done; + __pyx_t_2 = __pyx_t_3; + goto __pyx_L7_bool_binop_done; } - __pyx_t_2 = (__pyx_v_n_bytes == 8); - __pyx_t_3 = __pyx_t_2; - __pyx_L15_bool_binop_done:; - if (__pyx_t_3) { + __pyx_t_3 = (__pyx_v_available >= __pyx_v_n); + __pyx_t_2 = __pyx_t_3; + __pyx_L7_bool_binop_done:; + if (__pyx_t_2) { - /* "dataRead.pyx":63 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":82 + * available = self._buf_len - offset + * if n < 0 or available >= n: + * end = offset + (n if n >= 0 else available) # <<<<<<<<<<<<<< + * data = bytes(self._buf[offset:end]) + * self._pos += len(data) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 63, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_2) { - goto __pyx_L19_next_or; - } else { - } - __pyx_t_2 = (__pyx_v_signal_data_type == 4); - if (!__pyx_t_2) { + __pyx_t_2 = (__pyx_v_n >= 0); + if (__pyx_t_2) { + __pyx_t_1 = __pyx_v_n; } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L18_bool_binop_done; + __pyx_t_1 = __pyx_v_available; } - __pyx_L19_next_or:; + __pyx_v_end = (__pyx_v_offset + __pyx_t_1); - /* "dataRead.pyx":64 - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":83 + * if n < 0 or available >= n: + * end = offset + (n if n >= 0 else available) + * data = bytes(self._buf[offset:end]) # <<<<<<<<<<<<<< + * self._pos += len(data) + * return data */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 64, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_self->_buf) + __pyx_v_offset, __pyx_v_end - __pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 64, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L18_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_signal_data_type == 5); - __pyx_t_3 = __pyx_t_2; - __pyx_L18_bool_binop_done:; + __pyx_v_data = ((PyObject*)__pyx_t_5); + __pyx_t_5 = 0; - /* "dataRead.pyx":63 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":84 + * end = offset + (n if n >= 0 else available) + * data = bytes(self._buf[offset:end]) + * self._pos += len(data) # <<<<<<<<<<<<<< + * return data + * # Buffer miss: refill centred on pos, then serve */ - if (__pyx_t_3) { + __pyx_t_1 = __Pyx_PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 84, __pyx_L1_error) + __pyx_v_self->_pos = (__pyx_v_self->_pos + __pyx_t_1); - /* "dataRead.pyx":65 - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes + /* "dataRead.pyx":85 + * data = bytes(self._buf[offset:end]) + * self._pos += len(data) + * return data # <<<<<<<<<<<<<< + * # Buffer miss: refill centred on pos, then serve + * self._fill(pos) */ - __Pyx_XDECREF(__pyx_r); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_data); + __pyx_r = __pyx_v_data; + goto __pyx_L0; - /* "dataRead.pyx":66 - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_double(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":81 + * offset = pos - self._buf_start + * available = self._buf_len - offset + * if n < 0 or available >= n: # <<<<<<<<<<<<<< + * end = offset + (n if n >= 0 else available) + * data = bytes(self._buf[offset:end]) */ - __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + } - /* "dataRead.pyx":63 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":78 + * buf_end = self._buf_start + self._buf_len + * # Fast path: serve directly from buffer + * if self._buf_len > 0 and self._buf_start <= pos < buf_end: # <<<<<<<<<<<<<< + * offset = pos - self._buf_start + * available = self._buf_len - offset */ - } + } - /* "dataRead.pyx":68 - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes - * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + /* "dataRead.pyx":87 + * return data + * # Buffer miss: refill centred on pos, then serve + * self._fill(pos) # <<<<<<<<<<<<<< + * offset = pos - self._buf_start + * if offset >= self._buf_len: */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __pyx_t_6 = ((struct __pyx_vtabstruct_8dataRead_SymBufReader *)__pyx_v_self->__pyx_vtab)->_fill(__pyx_v_self, __pyx_v_pos); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 87, __pyx_L1_error) - /* "dataRead.pyx":69 - * else: # swap bytes - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ + /* "dataRead.pyx":88 + * # Buffer miss: refill centred on pos, then serve + * self._fill(pos) + * offset = pos - self._buf_start # <<<<<<<<<<<<<< + * if offset >= self._buf_len: + * return b'' */ - __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 68, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __pyx_v_offset = (__pyx_v_pos - __pyx_v_self->_buf_start); - /* "dataRead.pyx":62 - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":89 + * self._fill(pos) + * offset = pos - self._buf_start + * if offset >= self._buf_len: # <<<<<<<<<<<<<< + * return b'' + * available = self._buf_len - offset */ - } + __pyx_t_2 = (__pyx_v_offset >= __pyx_v_self->_buf_len); + if (__pyx_t_2) { - /* "dataRead.pyx":70 - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":90 + * offset = pos - self._buf_start + * if offset >= self._buf_len: + * return b'' # <<<<<<<<<<<<<< + * available = self._buf_len - offset + * end = offset + (n if n >= 0 else available) */ - switch (__pyx_v_signal_data_type) { - case 4: - case 5: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; - } - __pyx_t_5 = __pyx_t_2; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L22_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_n_bytes == 2); - __pyx_t_3 = __pyx_t_5; - __pyx_L22_bool_binop_done:; - if (__pyx_t_3) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_b__12); + __pyx_r = __pyx_kp_b__12; + goto __pyx_L0; - /* "dataRead.pyx":71 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":89 + * self._fill(pos) + * offset = pos - self._buf_start + * if offset >= self._buf_len: # <<<<<<<<<<<<<< + * return b'' + * available = self._buf_len - offset */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 71, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 71, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_5) { - goto __pyx_L26_next_or; - } else { - } - __pyx_t_5 = (__pyx_v_signal_data_type == 4); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L25_bool_binop_done; - } - __pyx_L26_next_or:; + } - /* "dataRead.pyx":72 - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":91 + * if offset >= self._buf_len: + * return b'' + * available = self._buf_len - offset # <<<<<<<<<<<<<< + * end = offset + (n if n >= 0 else available) + * data = bytes(self._buf[offset:end]) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 72, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 72, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L25_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_signal_data_type == 5); - __pyx_t_3 = __pyx_t_5; - __pyx_L25_bool_binop_done:; + __pyx_v_available = (__pyx_v_self->_buf_len - __pyx_v_offset); - /* "dataRead.pyx":71 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":92 + * return b'' + * available = self._buf_len - offset + * end = offset + (n if n >= 0 else available) # <<<<<<<<<<<<<< + * data = bytes(self._buf[offset:end]) + * self._pos += len(data) */ - if (__pyx_t_3) { + __pyx_t_2 = (__pyx_v_n >= 0); + if (__pyx_t_2) { + __pyx_t_1 = __pyx_v_n; + } else { + __pyx_t_1 = __pyx_v_available; + } + __pyx_v_end = (__pyx_v_offset + __pyx_t_1); - /* "dataRead.pyx":73 - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes + /* "dataRead.pyx":93 + * available = self._buf_len - offset + * end = offset + (n if n >= 0 else available) + * data = bytes(self._buf[offset:end]) # <<<<<<<<<<<<<< + * self._pos += len(data) + * return data */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_self->_buf) + __pyx_v_offset, __pyx_v_end - __pyx_v_offset); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_data = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":74 - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_half(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":94 + * end = offset + (n if n >= 0 else available) + * data = bytes(self._buf[offset:end]) + * self._pos += len(data) # <<<<<<<<<<<<<< + * return data + * */ - __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 73, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_t_1 = __Pyx_PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 94, __pyx_L1_error) + __pyx_v_self->_pos = (__pyx_v_self->_pos + __pyx_t_1); - /* "dataRead.pyx":71 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":95 + * data = bytes(self._buf[offset:end]) + * self._pos += len(data) + * return data # <<<<<<<<<<<<<< + * + * def fileno(self): */ - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_data); + __pyx_r = __pyx_v_data; + goto __pyx_L0; - /* "dataRead.pyx":76 - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes - * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char + /* "dataRead.pyx":72 + * return self._pos + * + * def read(self, Py_ssize_t n=-1): # <<<<<<<<<<<<<< + * """Return up to n bytes from the current position (or all if n<0).""" + * cdef Py_ssize_t pos = self._pos */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":77 - * else: # swap bytes - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char - * return read_unsigned_char(bit_stream, record_format, number_of_records, - */ - __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 76, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("dataRead.SymBufReader.read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_data); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":70 - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): +/* "dataRead.pyx":97 + * return data + * + * def fileno(self): # <<<<<<<<<<<<<< + * return self._fid.fileno() + * */ - } - /* "dataRead.pyx":78 - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< - * return read_unsigned_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - */ - switch (__pyx_v_signal_data_type) { - case 0: - case 1: - case 13: - __pyx_t_5 = 1; - break; - default: - __pyx_t_5 = 0; - break; - } - __pyx_t_2 = __pyx_t_5; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L29_bool_binop_done; +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_12SymBufReader_9fileno(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8dataRead_12SymBufReader_9fileno = {"fileno", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_9fileno, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8dataRead_12SymBufReader_9fileno(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("fileno (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("fileno", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "fileno", 0))) return NULL; + __pyx_r = __pyx_pf_8dataRead_12SymBufReader_8fileno(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_12SymBufReader_8fileno(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("fileno", 1); + + /* "dataRead.pyx":98 + * + * def fileno(self): + * return self._fid.fileno() # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_fileno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(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; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "dataRead.pyx":97 + * return data + * + * def fileno(self): # <<<<<<<<<<<<<< + * return self._fid.fileno() + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_AddTraceback("dataRead.SymBufReader.fileno", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_12SymBufReader_11__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8dataRead_12SymBufReader_11__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8dataRead_12SymBufReader_11__reduce_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + if (unlikely(__pyx_nargs > 0)) { + __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;} + if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL; + __pyx_r = __pyx_pf_8dataRead_12SymBufReader_10__reduce_cython__(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_12SymBufReader_10__reduce_cython__(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self) { + PyObject *__pyx_v_state = 0; + PyObject *__pyx_v__dict = 0; + int __pyx_v_use_setstate; + 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; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__reduce_cython__", 1); + + /* "(tree fragment)":5 + * cdef object _dict + * cdef bint use_setstate + * state = (self._buf, self._buf_len, self._buf_start, self._fid, self._pos) # <<<<<<<<<<<<<< + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + */ + __pyx_t_1 = __Pyx_PyObject_FromCString(__pyx_v_self->_buf); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->_buf_len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->_buf_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_self->_pos); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_self->_fid); + __Pyx_GIVEREF(__pyx_v_self->_fid); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_self->_fid)) __PYX_ERR(1, 5, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_v_state = ((PyObject*)__pyx_t_5); + __pyx_t_5 = 0; + + /* "(tree fragment)":6 + * cdef bint use_setstate + * state = (self._buf, self._buf_len, self._buf_start, self._fid, self._pos) + * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< + * if _dict is not None: + * state += (_dict,) + */ + __pyx_t_5 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_v__dict = __pyx_t_5; + __pyx_t_5 = 0; + + /* "(tree fragment)":7 + * state = (self._buf, self._buf_len, self._buf_start, self._fid, self._pos) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + __pyx_t_6 = (__pyx_v__dict != Py_None); + if (__pyx_t_6) { + + /* "(tree fragment)":8 + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: + * state += (_dict,) # <<<<<<<<<<<<<< + * use_setstate = True + * else: + */ + __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(__pyx_v__dict); + __Pyx_GIVEREF(__pyx_v__dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error); + __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); + __pyx_t_4 = 0; + + /* "(tree fragment)":9 + * if _dict is not None: + * state += (_dict,) + * use_setstate = True # <<<<<<<<<<<<<< + * else: + * use_setstate = self._fid is not None + */ + __pyx_v_use_setstate = 1; + + /* "(tree fragment)":7 + * state = (self._buf, self._buf_len, self._buf_start, self._fid, self._pos) + * _dict = getattr(self, '__dict__', None) + * if _dict is not None: # <<<<<<<<<<<<<< + * state += (_dict,) + * use_setstate = True + */ + goto __pyx_L3; + } + + /* "(tree fragment)":11 + * use_setstate = True + * else: + * use_setstate = self._fid is not None # <<<<<<<<<<<<<< + * if use_setstate: + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, None), state + */ + /*else*/ { + __pyx_t_6 = (__pyx_v_self->_fid != Py_None); + __pyx_v_use_setstate = __pyx_t_6; + } + __pyx_L3:; + + /* "(tree fragment)":12 + * else: + * use_setstate = self._fid is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, None), state + * else: + */ + if (__pyx_v_use_setstate) { + + /* "(tree fragment)":13 + * use_setstate = self._fid is not None + * if use_setstate: + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, None), state # <<<<<<<<<<<<<< + * else: + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, state) + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_SymBufReader); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_55633519); + __Pyx_GIVEREF(__pyx_int_55633519); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_55633519)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_r = __pyx_t_3; + __pyx_t_3 = 0; + goto __pyx_L0; + + /* "(tree fragment)":12 + * else: + * use_setstate = self._fid is not None + * if use_setstate: # <<<<<<<<<<<<<< + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, None), state + * else: + */ + } + + /* "(tree fragment)":15 + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, None), state + * else: + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, state) # <<<<<<<<<<<<<< + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_SymBufReader__set_state(self, __pyx_state) + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_SymBufReader); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_55633519); + __Pyx_GIVEREF(__pyx_int_55633519); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_int_55633519)) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_state); + __Pyx_GIVEREF(__pyx_v_state); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error); + __Pyx_GIVEREF(__pyx_t_5); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_5 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + + /* 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_5); + __Pyx_AddTraceback("dataRead.SymBufReader.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_state); + __Pyx_XDECREF(__pyx_v__dict); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":16 + * else: + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_SymBufReader__set_state(self, __pyx_state) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_12SymBufReader_13__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8dataRead_12SymBufReader_13__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8dataRead_12SymBufReader_13__setstate_cython__(PyObject *__pyx_v_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[1] = {0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 1)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + } + __pyx_v___pyx_state = values[0]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.SymBufReader.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8dataRead_12SymBufReader_12__setstate_cython__(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v_self), __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_12SymBufReader_12__setstate_cython__(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v_self, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__setstate_cython__", 1); + + /* "(tree fragment)":17 + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, state) + * def __setstate_cython__(self, __pyx_state): + * __pyx_unpickle_SymBufReader__set_state(self, __pyx_state) # <<<<<<<<<<<<<< + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error) + __pyx_t_1 = __pyx_f_8dataRead___pyx_unpickle_SymBufReader__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_SymBufReader__set_state(self, __pyx_state) + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("dataRead.SymBufReader.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":101 + * + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def sorted_data_read(bytes tmp, unsigned short bit_count, + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_1sorted_data_read(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8dataRead_sorted_data_read, "dataRead function to read in cython a channel from a byte stream\n\n Parameters\n ------------\n tmp : bytes\n byte stream\n bit_count : unsigned short\n number of bit taken by the channel in the record\n signal_data_type : unsigned short\n int to describe data type\n record_format : string\n basic numpy dtype description of data type, used to create\n returned numpy ndarray\n number_of_records : unsigned long long\n number of records in byte stream\n record_byte_size : unsigned long\n number of bytes taken by one record repeated in byte stream\n bit_offset : unsigned char\n bit offset of data in C aligned bytes\n pos_byte_beg : unsigned long\n beginning byte position of channel in record\n n_bytes : unsigned long\n bytes length of channel in record\n array : boolean\n reads an array, not a vector\n\n Returns\n -------\n ndarray of type record_format with number_of_records records.\n Byte order is swapped if necessary to match machine byte order before bits offset and masking\n "); +static PyMethodDef __pyx_mdef_8dataRead_1sorted_data_read = {"sorted_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_1sorted_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_sorted_data_read}; +static PyObject *__pyx_pw_8dataRead_1sorted_data_read(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_tmp = 0; + unsigned short __pyx_v_bit_count; + unsigned short __pyx_v_signal_data_type; + PyObject *__pyx_v_record_format = 0; + unsigned PY_LONG_LONG __pyx_v_number_of_records; + unsigned long __pyx_v_record_byte_size; + unsigned char __pyx_v_bit_offset; + unsigned long __pyx_v_pos_byte_beg; + unsigned long __pyx_v_n_bytes; + PyObject *__pyx_v_array = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("sorted_data_read (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tmp,&__pyx_n_s_bit_count,&__pyx_n_s_signal_data_type,&__pyx_n_s_record_format,&__pyx_n_s_number_of_records,&__pyx_n_s_record_byte_size,&__pyx_n_s_bit_offset,&__pyx_n_s_pos_byte_beg,&__pyx_n_s_n_bytes,&__pyx_n_s_array,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tmp)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_bit_count)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 1); __PYX_ERR(0, 101, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 2); __PYX_ERR(0, 101, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_format)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 3); __PYX_ERR(0, 101, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_number_of_records)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 4); __PYX_ERR(0, 101, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_byte_size)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[5]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 5); __PYX_ERR(0, 101, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_bit_offset)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[6]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 6); __PYX_ERR(0, 101, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pos_byte_beg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[7]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 7); __PYX_ERR(0, 101, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_bytes)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[8]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 8); __PYX_ERR(0, 101, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_array)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[9]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 9); __PYX_ERR(0, 101, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sorted_data_read") < 0)) __PYX_ERR(0, 101, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 10)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); + } + __pyx_v_tmp = ((PyObject*)values[0]); + __pyx_v_bit_count = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_bit_count == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 103, __pyx_L3_error) + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L3_error) + __pyx_v_record_format = ((PyObject*)values[3]); + __pyx_v_number_of_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_number_of_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L3_error) + __pyx_v_record_byte_size = __Pyx_PyInt_As_unsigned_long(values[5]); if (unlikely((__pyx_v_record_byte_size == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error) + __pyx_v_bit_offset = __Pyx_PyInt_As_unsigned_char(values[6]); if (unlikely((__pyx_v_bit_offset == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error) + __pyx_v_pos_byte_beg = __Pyx_PyInt_As_unsigned_long(values[7]); if (unlikely((__pyx_v_pos_byte_beg == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error) + __pyx_v_n_bytes = __Pyx_PyInt_As_unsigned_long(values[8]); if (unlikely((__pyx_v_n_bytes == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error) + __pyx_v_array = values[9]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, __pyx_nargs); __PYX_ERR(0, 101, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.sorted_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 103, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_record_format), (&PyUnicode_Type), 1, "record_format", 1))) __PYX_ERR(0, 104, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_sorted_data_read(__pyx_self, __pyx_v_tmp, __pyx_v_bit_count, __pyx_v_signal_data_type, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_bit_offset, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_array); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tmp, unsigned short __pyx_v_bit_count, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, PyObject *__pyx_v_array) { + char const *__pyx_v_bit_stream; + CYTHON_UNUSED long __pyx_v_swap_flag; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + unsigned char __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("sorted_data_read", 1); + + /* "dataRead.pyx":138 + * Byte order is swapped if necessary to match machine byte order before bits offset and masking + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< + * if not array: + * if 'V' in record_format or 'S' in record_format or record_format is None: + */ + __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 138, __pyx_L1_error) + __pyx_v_bit_stream = __pyx_t_1; + + /* "dataRead.pyx":139 + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * if not array: # <<<<<<<<<<<<<< + * if 'V' in record_format or 'S' in record_format or record_format is None: + * return read_byte(bit_stream, record_format, number_of_records, + */ + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_array); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 139, __pyx_L1_error) + __pyx_t_3 = (!__pyx_t_2); + if (__pyx_t_3) { + + /* "dataRead.pyx":140 + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * if not array: + * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + */ + if (unlikely(__pyx_v_record_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 140, __pyx_L1_error) + } + __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_V, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 140, __pyx_L1_error) + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + if (unlikely(__pyx_v_record_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 140, __pyx_L1_error) + } + __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_S, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 140, __pyx_L1_error) + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_record_format == ((PyObject*)Py_None)); + __pyx_t_3 = __pyx_t_2; + __pyx_L5_bool_binop_done:; + if (__pyx_t_3) { + + /* "dataRead.pyx":141 + * if not array: + * if 'V' in record_format or 'S' in record_format or record_format is None: + * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + */ + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":142 + * if 'V' in record_format or 'S' in record_format or record_format is None: + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ + */ + __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 141, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "dataRead.pyx":140 + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * if not array: + * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + */ + } + + /* "dataRead.pyx":143 + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + */ + switch (__pyx_v_signal_data_type) { + case 4: + case 5: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_n_bytes == 4); + __pyx_t_3 = __pyx_t_5; + __pyx_L8_bool_binop_done:; + if (__pyx_t_3) { + + /* "dataRead.pyx":144 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 144, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + goto __pyx_L12_next_or; + } else { + } + __pyx_t_5 = (__pyx_v_signal_data_type == 4); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L11_bool_binop_done; + } + __pyx_L12_next_or:; + + /* "dataRead.pyx":145 + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 145, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_signal_data_type == 5); + __pyx_t_3 = __pyx_t_5; + __pyx_L11_bool_binop_done:; + + /* "dataRead.pyx":144 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, + */ + if (__pyx_t_3) { + + /* "dataRead.pyx":146 + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + */ + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":147 + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_float(bit_stream, record_format, number_of_records, + */ + __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 146, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "dataRead.pyx":144 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, + */ + } + + /* "dataRead.pyx":149 + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":150 + * else: # swap bytes + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ + */ + __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":143 + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + */ + } + + /* "dataRead.pyx":151 + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + */ + switch (__pyx_v_signal_data_type) { + case 4: + case 5: + __pyx_t_5 = 1; + break; + default: + __pyx_t_5 = 0; + break; + } + __pyx_t_2 = __pyx_t_5; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_n_bytes == 8); + __pyx_t_3 = __pyx_t_2; + __pyx_L15_bool_binop_done:; + if (__pyx_t_3) { + + /* "dataRead.pyx":152 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 152, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 152, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_2) { + goto __pyx_L19_next_or; + } else { + } + __pyx_t_2 = (__pyx_v_signal_data_type == 4); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L18_bool_binop_done; + } + __pyx_L19_next_or:; + + /* "dataRead.pyx":153 + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L18_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_signal_data_type == 5); + __pyx_t_3 = __pyx_t_2; + __pyx_L18_bool_binop_done:; + + /* "dataRead.pyx":152 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, + */ + if (__pyx_t_3) { + + /* "dataRead.pyx":154 + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + */ + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":155 + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_double(bit_stream, record_format, number_of_records, + */ + __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 154, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "dataRead.pyx":152 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, + */ + } + + /* "dataRead.pyx":157 + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":158 + * else: # swap bytes + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ + */ + __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 157, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":151 + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + */ + } + + /* "dataRead.pyx":159 + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + */ + switch (__pyx_v_signal_data_type) { + case 4: + case 5: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L22_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_n_bytes == 2); + __pyx_t_3 = __pyx_t_5; + __pyx_L22_bool_binop_done:; + if (__pyx_t_3) { + + /* "dataRead.pyx":160 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + goto __pyx_L26_next_or; + } else { + } + __pyx_t_5 = (__pyx_v_signal_data_type == 4); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L25_bool_binop_done; + } + __pyx_L26_next_or:; + + /* "dataRead.pyx":161 + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L25_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_signal_data_type == 5); + __pyx_t_3 = __pyx_t_5; + __pyx_L25_bool_binop_done:; + + /* "dataRead.pyx":160 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, + */ + if (__pyx_t_3) { + + /* "dataRead.pyx":162 + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + */ + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":163 + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_half(bit_stream, record_format, number_of_records, + */ + __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "dataRead.pyx":160 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, + */ + } + + /* "dataRead.pyx":165 + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":166 + * else: # swap bytes + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char + * return read_unsigned_char(bit_stream, record_format, number_of_records, + */ + __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 165, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":159 + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + */ + } + + /* "dataRead.pyx":167 + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< + * return read_unsigned_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + */ + switch (__pyx_v_signal_data_type) { + case 0: + case 1: + case 13: + __pyx_t_5 = 1; + break; + default: + __pyx_t_5 = 0; + break; + } + __pyx_t_2 = __pyx_t_5; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L29_bool_binop_done; } __pyx_t_2 = (__pyx_v_n_bytes == 1); __pyx_t_3 = __pyx_t_2; __pyx_L29_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":79 + /* "dataRead.pyx":168 * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char * return read_unsigned_char(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21097,20 +23486,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":80 + /* "dataRead.pyx":169 * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char * return read_unsigned_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) # <<<<<<<<<<<<<< * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char * return read_signed_char(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 79, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":78 + /* "dataRead.pyx":167 * return read_half(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< @@ -21119,7 +23508,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":81 + /* "dataRead.pyx":170 * return read_unsigned_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char # <<<<<<<<<<<<<< @@ -21146,7 +23535,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_L31_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":82 + /* "dataRead.pyx":171 * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char * return read_signed_char(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21155,20 +23544,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":83 + /* "dataRead.pyx":172 * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char * return read_signed_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) # <<<<<<<<<<<<<< * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 82, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":81 + /* "dataRead.pyx":170 * return read_unsigned_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char # <<<<<<<<<<<<<< @@ -21177,7 +23566,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":84 + /* "dataRead.pyx":173 * return read_signed_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short # <<<<<<<<<<<<<< @@ -21206,16 +23595,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_L33_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":85 + /* "dataRead.pyx":174 * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_short(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 85, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 85, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 174, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { goto __pyx_L37_next_or; @@ -21229,16 +23618,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L37_next_or:; - /* "dataRead.pyx":86 + /* "dataRead.pyx":175 * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 86, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 86, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 175, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -21249,7 +23638,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_3 = __pyx_t_2; __pyx_L36_bool_binop_done:; - /* "dataRead.pyx":85 + /* "dataRead.pyx":174 * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -21258,7 +23647,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ if (__pyx_t_3) { - /* "dataRead.pyx":87 + /* "dataRead.pyx":176 * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21267,20 +23656,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":88 + /* "dataRead.pyx":177 * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_unsigned_short(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 87, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":85 + /* "dataRead.pyx":174 * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -21289,7 +23678,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":90 + /* "dataRead.pyx":179 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) * else: # swap bytes * return read_unsigned_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21299,21 +23688,21 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":91 + /* "dataRead.pyx":180 * else: # swap bytes * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 90, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":84 + /* "dataRead.pyx":173 * return read_signed_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short # <<<<<<<<<<<<<< @@ -21322,7 +23711,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":92 + /* "dataRead.pyx":181 * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short # <<<<<<<<<<<<<< @@ -21349,16 +23738,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_L40_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":93 + /* "dataRead.pyx":182 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 3): * return read_signed_short(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 182, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 182, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { goto __pyx_L44_next_or; @@ -21372,16 +23761,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L44_next_or:; - /* "dataRead.pyx":94 + /* "dataRead.pyx":183 * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 94, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 94, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 183, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { } else { @@ -21392,7 +23781,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_3 = __pyx_t_5; __pyx_L43_bool_binop_done:; - /* "dataRead.pyx":93 + /* "dataRead.pyx":182 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -21401,7 +23790,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ if (__pyx_t_3) { - /* "dataRead.pyx":95 + /* "dataRead.pyx":184 * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): * return read_signed_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21410,20 +23799,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":96 + /* "dataRead.pyx":185 * (byteorder == 'big' and signal_data_type == 3): * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_signed_short(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 95, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":93 + /* "dataRead.pyx":182 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -21432,7 +23821,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":98 + /* "dataRead.pyx":187 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) * else: # swap bytes * return read_signed_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21442,21 +23831,21 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":99 + /* "dataRead.pyx":188 * else: # swap bytes * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 98, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":92 + /* "dataRead.pyx":181 * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short # <<<<<<<<<<<<<< @@ -21465,7 +23854,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":100 + /* "dataRead.pyx":189 * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int # <<<<<<<<<<<<<< @@ -21493,16 +23882,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_L47_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":101 + /* "dataRead.pyx":190 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 190, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 190, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { goto __pyx_L51_next_or; @@ -21516,16 +23905,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L51_next_or:; - /* "dataRead.pyx":102 + /* "dataRead.pyx":191 * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 102, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 102, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 191, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -21536,7 +23925,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_3 = __pyx_t_2; __pyx_L50_bool_binop_done:; - /* "dataRead.pyx":101 + /* "dataRead.pyx":190 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -21545,7 +23934,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ if (__pyx_t_3) { - /* "dataRead.pyx":103 + /* "dataRead.pyx":192 * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21554,20 +23943,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":104 + /* "dataRead.pyx":193 * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 103, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":101 + /* "dataRead.pyx":190 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -21576,7 +23965,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":106 + /* "dataRead.pyx":195 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) * else: # swap bytes * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21586,21 +23975,21 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":107 + /* "dataRead.pyx":196 * else: # swap bytes * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":100 + /* "dataRead.pyx":189 * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int # <<<<<<<<<<<<<< @@ -21609,7 +23998,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":108 + /* "dataRead.pyx":197 * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int # <<<<<<<<<<<<<< @@ -21636,16 +24025,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_L54_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":109 + /* "dataRead.pyx":198 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 3): * return read_signed_int(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 109, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 198, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { goto __pyx_L58_next_or; @@ -21659,16 +24048,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L58_next_or:; - /* "dataRead.pyx":110 + /* "dataRead.pyx":199 * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 110, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 199, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 110, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 199, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { } else { @@ -21679,7 +24068,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_3 = __pyx_t_5; __pyx_L57_bool_binop_done:; - /* "dataRead.pyx":109 + /* "dataRead.pyx":198 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -21688,7 +24077,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ if (__pyx_t_3) { - /* "dataRead.pyx":111 + /* "dataRead.pyx":200 * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): * return read_signed_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21697,20 +24086,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":112 + /* "dataRead.pyx":201 * (byteorder == 'big' and signal_data_type == 3): * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_signed_int(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 200, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":109 + /* "dataRead.pyx":198 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -21719,7 +24108,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":114 + /* "dataRead.pyx":203 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) * else: # swap bytes * return read_signed_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21729,21 +24118,21 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":115 + /* "dataRead.pyx":204 * else: # swap bytes * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 114, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":108 + /* "dataRead.pyx":197 * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int # <<<<<<<<<<<<<< @@ -21752,7 +24141,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":116 + /* "dataRead.pyx":205 * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long # <<<<<<<<<<<<<< @@ -21779,16 +24168,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_L61_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":117 + /* "dataRead.pyx":206 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 117, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 206, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 117, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 206, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { goto __pyx_L65_next_or; @@ -21802,16 +24191,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L65_next_or:; - /* "dataRead.pyx":118 + /* "dataRead.pyx":207 * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 118, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 207, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 118, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 207, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -21822,7 +24211,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_3 = __pyx_t_2; __pyx_L64_bool_binop_done:; - /* "dataRead.pyx":117 + /* "dataRead.pyx":206 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -21831,7 +24220,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ if (__pyx_t_3) { - /* "dataRead.pyx":119 + /* "dataRead.pyx":208 * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21840,20 +24229,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":120 + /* "dataRead.pyx":209 * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 119, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":117 + /* "dataRead.pyx":206 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -21862,7 +24251,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":122 + /* "dataRead.pyx":211 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) * else: # swap bytes * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21872,21 +24261,21 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":123 + /* "dataRead.pyx":212 * else: # swap bytes * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 122, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":116 + /* "dataRead.pyx":205 * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long # <<<<<<<<<<<<<< @@ -21895,7 +24284,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":124 + /* "dataRead.pyx":213 * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long # <<<<<<<<<<<<<< @@ -21922,16 +24311,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_L68_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":125 + /* "dataRead.pyx":214 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 3): * return read_signed_longlong(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 125, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 214, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 125, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 214, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { goto __pyx_L72_next_or; @@ -21945,16 +24334,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L72_next_or:; - /* "dataRead.pyx":126 + /* "dataRead.pyx":215 * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 126, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 215, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 126, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 215, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { } else { @@ -21965,7 +24354,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_3 = __pyx_t_5; __pyx_L71_bool_binop_done:; - /* "dataRead.pyx":125 + /* "dataRead.pyx":214 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -21974,7 +24363,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ if (__pyx_t_3) { - /* "dataRead.pyx":127 + /* "dataRead.pyx":216 * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): * return read_signed_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -21983,20 +24372,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":128 + /* "dataRead.pyx":217 * (byteorder == 'big' and signal_data_type == 3): * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_signed_longlong(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 127, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); 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; - /* "dataRead.pyx":125 + /* "dataRead.pyx":214 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -22005,7 +24394,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":130 + /* "dataRead.pyx":219 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) * else: # swap bytes * return read_signed_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22015,21 +24404,21 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":131 + /* "dataRead.pyx":220 * else: # swap bytes * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 130, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 219, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":124 + /* "dataRead.pyx":213 * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long # <<<<<<<<<<<<<< @@ -22038,7 +24427,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":132 + /* "dataRead.pyx":221 * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex # <<<<<<<<<<<<<< @@ -22057,16 +24446,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_5 = __pyx_t_3; if (__pyx_t_5) { - /* "dataRead.pyx":133 + /* "dataRead.pyx":222 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 16): * swap_flag = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 133, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 133, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 222, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_3) { goto __pyx_L77_next_or; @@ -22080,16 +24469,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L77_next_or:; - /* "dataRead.pyx":134 + /* "dataRead.pyx":223 * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ * (byteorder == 'big' and signal_data_type == 16): # <<<<<<<<<<<<<< * swap_flag = 0 * else: # swap bytes */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 134, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 223, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { } else { @@ -22100,7 +24489,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_5 = __pyx_t_3; __pyx_L76_bool_binop_done:; - /* "dataRead.pyx":133 + /* "dataRead.pyx":222 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< @@ -22109,7 +24498,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ if (__pyx_t_5) { - /* "dataRead.pyx":135 + /* "dataRead.pyx":224 * if (byteorder == 'little' and signal_data_type == 15) or \ * (byteorder == 'big' and signal_data_type == 16): * swap_flag = 0 # <<<<<<<<<<<<<< @@ -22118,7 +24507,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __pyx_v_swap_flag = 0; - /* "dataRead.pyx":133 + /* "dataRead.pyx":222 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< @@ -22128,7 +24517,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p goto __pyx_L75; } - /* "dataRead.pyx":137 + /* "dataRead.pyx":226 * swap_flag = 0 * else: # swap bytes * swap_flag = 1 # <<<<<<<<<<<<<< @@ -22140,7 +24529,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L75:; - /* "dataRead.pyx":138 + /* "dataRead.pyx":227 * else: # swap bytes * swap_flag = 1 * if n_bytes == 16: # <<<<<<<<<<<<<< @@ -22150,7 +24539,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p switch (__pyx_v_n_bytes) { case 16: - /* "dataRead.pyx":139 + /* "dataRead.pyx":228 * swap_flag = 1 * if n_bytes == 16: * return read_cdouble(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22159,20 +24548,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":140 + /* "dataRead.pyx":229 * if n_bytes == 16: * return read_cdouble(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * elif n_bytes == 8: * return read_cfloat(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_cdouble(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 139, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_cdouble(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":138 + /* "dataRead.pyx":227 * else: # swap bytes * swap_flag = 1 * if n_bytes == 16: # <<<<<<<<<<<<<< @@ -22182,7 +24571,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p break; case 8: - /* "dataRead.pyx":142 + /* "dataRead.pyx":231 * record_byte_size, pos_byte_beg, 0) * elif n_bytes == 8: * return read_cfloat(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22191,20 +24580,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":143 + /* "dataRead.pyx":232 * elif n_bytes == 8: * return read_cfloat(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * elif n_bytes == 4: * return read_chalf(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_cfloat(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 142, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_cfloat(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":141 + /* "dataRead.pyx":230 * return read_cdouble(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) * elif n_bytes == 8: # <<<<<<<<<<<<<< @@ -22214,7 +24603,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p break; case 4: - /* "dataRead.pyx":145 + /* "dataRead.pyx":234 * record_byte_size, pos_byte_beg, 0) * elif n_bytes == 4: * return read_chalf(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22223,20 +24612,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":146 + /* "dataRead.pyx":235 * elif n_bytes == 4: * return read_chalf(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * elif n_bytes <= 4: * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) */ - __pyx_t_4 = __pyx_f_8dataRead_read_chalf(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_chalf(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":144 + /* "dataRead.pyx":233 * return read_cfloat(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) * elif n_bytes == 4: # <<<<<<<<<<<<<< @@ -22247,7 +24636,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p default: break; } - /* "dataRead.pyx":132 + /* "dataRead.pyx":221 * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex # <<<<<<<<<<<<<< @@ -22257,7 +24646,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p goto __pyx_L4; } - /* "dataRead.pyx":147 + /* "dataRead.pyx":236 * return read_chalf(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) * elif n_bytes <= 4: # <<<<<<<<<<<<<< @@ -22267,7 +24656,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_5 = (__pyx_v_n_bytes <= 4); if (__pyx_t_5) { - /* "dataRead.pyx":149 + /* "dataRead.pyx":238 * elif n_bytes <= 4: * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22276,16 +24665,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":151 + /* "dataRead.pyx":240 * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) # <<<<<<<<<<<<<< * elif n_bytes <= 8: * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 151, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 240, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { __pyx_t_6 = 0; @@ -22293,20 +24682,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_6 = 1; } - /* "dataRead.pyx":149 + /* "dataRead.pyx":238 * elif n_bytes <= 4: * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 238, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":147 + /* "dataRead.pyx":236 * return read_chalf(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) * elif n_bytes <= 4: # <<<<<<<<<<<<<< @@ -22315,7 +24704,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":152 + /* "dataRead.pyx":241 * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) * elif n_bytes <= 8: # <<<<<<<<<<<<<< @@ -22325,7 +24714,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_5 = (__pyx_v_n_bytes <= 8); if (__pyx_t_5) { - /* "dataRead.pyx":153 + /* "dataRead.pyx":242 * 0 if byteorder == 'little' else 1) * elif n_bytes <= 8: * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22334,16 +24723,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":155 + /* "dataRead.pyx":244 * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) # <<<<<<<<<<<<<< * else: * return read_byte(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 155, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 155, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 244, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { __pyx_t_6 = 0; @@ -22351,20 +24740,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_6 = 1; } - /* "dataRead.pyx":153 + /* "dataRead.pyx":242 * 0 if byteorder == 'little' else 1) * elif n_bytes <= 8: * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 242, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":152 + /* "dataRead.pyx":241 * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) * elif n_bytes <= 8: # <<<<<<<<<<<<<< @@ -22373,7 +24762,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":157 + /* "dataRead.pyx":246 * 0 if byteorder == 'little' else 1) * else: * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22383,14 +24772,14 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":158 + /* "dataRead.pyx":247 * else: * return read_byte(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 157, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 246, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; @@ -22398,7 +24787,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L4:; - /* "dataRead.pyx":50 + /* "dataRead.pyx":139 * """ * cdef const char* bit_stream = PyBytes_AsString(tmp) * if not array: # <<<<<<<<<<<<<< @@ -22408,7 +24797,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p goto __pyx_L3; } - /* "dataRead.pyx":160 + /* "dataRead.pyx":249 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< @@ -22416,9 +24805,9 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p * return read_array(bit_stream, record_format, number_of_records, */ /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 249, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 160, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 249, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_3) { goto __pyx_L82_next_or; @@ -22442,16 +24831,16 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L82_next_or:; - /* "dataRead.pyx":161 + /* "dataRead.pyx":250 * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ * (byteorder == 'big' and signal_data_type in (1, 3, 5)): # <<<<<<<<<<<<<< * return read_array(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 250, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 161, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 250, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -22472,7 +24861,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p __pyx_t_5 = __pyx_t_3; __pyx_L81_bool_binop_done:; - /* "dataRead.pyx":160 + /* "dataRead.pyx":249 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< @@ -22481,7 +24870,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ if (__pyx_t_5) { - /* "dataRead.pyx":162 + /* "dataRead.pyx":251 * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ * (byteorder == 'big' and signal_data_type in (1, 3, 5)): * return read_array(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22490,20 +24879,20 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":163 + /* "dataRead.pyx":252 * (byteorder == 'big' and signal_data_type in (1, 3, 5)): * return read_array(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_array(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 162, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 251, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":160 + /* "dataRead.pyx":249 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< @@ -22512,7 +24901,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p */ } - /* "dataRead.pyx":165 + /* "dataRead.pyx":254 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) * else: # swap bytes * return read_array(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -22522,14 +24911,14 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":166 + /* "dataRead.pyx":255 * else: # swap bytes * return read_array(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< * * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 165, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 254, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; @@ -22538,8 +24927,8 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p } __pyx_L3:; - /* "dataRead.pyx":12 - * cimport cython + /* "dataRead.pyx":101 + * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) @@ -22559,7 +24948,7 @@ static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__p return __pyx_r; } -/* "dataRead.pyx":168 +/* "dataRead.pyx":257 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) * * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -22590,46 +24979,46 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b int __pyx_clineno = 0; __Pyx_RefNannySetupContext("read_half", 1); - /* "dataRead.pyx":170 + /* "dataRead.pyx":259 * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 170, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_uint16_t(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 170, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_uint16_t(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 259, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_buf = __pyx_t_6; __pyx_t_6.memview = NULL; __pyx_t_6.data = NULL; - /* "dataRead.pyx":172 + /* "dataRead.pyx":261 * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) * cdef unsigned long long i * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing # <<<<<<<<<<<<<< @@ -22638,7 +25027,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b */ __pyx_v_temp_uint16 = 0; - /* "dataRead.pyx":173 + /* "dataRead.pyx":262 * cdef unsigned long long i * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -22650,7 +25039,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":174 + /* "dataRead.pyx":263 * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing * for i in range(number_of_records): * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -22659,7 +25048,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b */ (void)(memcpy((&__pyx_v_temp_uint16), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":175 + /* "dataRead.pyx":264 * for i in range(number_of_records): * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp_uint16 # <<<<<<<<<<<<<< @@ -22670,7 +25059,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b *((uint16_t *) ( /* dim=0 */ (__pyx_v_buf.data + __pyx_t_10 * __pyx_v_buf.strides[0]) )) = __pyx_v_temp_uint16; } - /* "dataRead.pyx":176 + /* "dataRead.pyx":265 * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp_uint16 * if swap == 0: # <<<<<<<<<<<<<< @@ -22680,7 +25069,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b __pyx_t_11 = (__pyx_v_swap == 0); if (__pyx_t_11) { - /* "dataRead.pyx":177 + /* "dataRead.pyx":266 * buf[i] = temp_uint16 * if swap == 0: * return np.asarray(buf).view(dtype=np.float16) # <<<<<<<<<<<<<< @@ -22688,12 +25077,12 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b * return np.asarray(buf).view(dtype=np.float16).byteswap() */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __pyx_t_12 = 0; @@ -22714,23 +25103,23 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 177, __pyx_L1_error) + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 177, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; @@ -22738,7 +25127,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b __pyx_t_2 = 0; goto __pyx_L0; - /* "dataRead.pyx":176 + /* "dataRead.pyx":265 * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp_uint16 * if swap == 0: # <<<<<<<<<<<<<< @@ -22747,7 +25136,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b */ } - /* "dataRead.pyx":179 + /* "dataRead.pyx":268 * return np.asarray(buf).view(dtype=np.float16) * else: * return np.asarray(buf).view(dtype=np.float16).byteswap() # <<<<<<<<<<<<<< @@ -22756,12 +25145,12 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; __pyx_t_12 = 0; @@ -22782,27 +25171,27 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 179, __pyx_L1_error) + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 179, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; @@ -22823,7 +25212,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 0+__pyx_t_12); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } @@ -22832,7 +25221,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b goto __pyx_L0; } - /* "dataRead.pyx":168 + /* "dataRead.pyx":257 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) * * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -22857,7 +25246,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b return __pyx_r; } -/* "dataRead.pyx":181 +/* "dataRead.pyx":270 * return np.asarray(buf).view(dtype=np.float16).byteswap() * * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -22894,54 +25283,54 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":184 + /* "dataRead.pyx":273 * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * # complex32 = real(f16) + imag(f16): return as (n_records, 2) float16 array * cdef np.ndarray[np.uint16_t, ndim=2] buf = np.empty((number_of_records, 2), dtype=np.uint16) # <<<<<<<<<<<<<< * cdef unsigned long long i * for i in range(number_of_records): */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error); __Pyx_INCREF(__pyx_int_2); __Pyx_GIVEREF(__pyx_int_2); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2)) __PYX_ERR(0, 184, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2)) __PYX_ERR(0, 273, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 184, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 184, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 184, __pyx_L1_error) + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 273, __pyx_L1_error) __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 184, __pyx_L1_error) + __PYX_ERR(0, 273, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_buf.diminfo[1].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_buf.diminfo[1].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[1]; } } @@ -22949,7 +25338,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; - /* "dataRead.pyx":186 + /* "dataRead.pyx":275 * cdef np.ndarray[np.uint16_t, ndim=2] buf = np.empty((number_of_records, 2), dtype=np.uint16) * cdef unsigned long long i * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -22961,7 +25350,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":187 + /* "dataRead.pyx":276 * cdef unsigned long long i * for i in range(number_of_records): * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -22973,7 +25362,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ if (__pyx_t_11 < 0) __pyx_t_11 += __pyx_pybuffernd_buf.diminfo[1].shape; (void)(memcpy((&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_buf.diminfo[1].strides))), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":188 + /* "dataRead.pyx":277 * for i in range(number_of_records): * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) # <<<<<<<<<<<<<< @@ -22986,7 +25375,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ (void)(memcpy((&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_buf.diminfo[1].strides))), (&(__pyx_v_bit_stream[((__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)) + 2)])), 2)); } - /* "dataRead.pyx":189 + /* "dataRead.pyx":278 * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) * if swap == 0: # <<<<<<<<<<<<<< @@ -22996,7 +25385,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ __pyx_t_12 = (__pyx_v_swap == 0); if (__pyx_t_12) { - /* "dataRead.pyx":190 + /* "dataRead.pyx":279 * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) * if swap == 0: * return buf.view(dtype=np.float16) # <<<<<<<<<<<<<< @@ -23004,18 +25393,18 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ * return buf.view(dtype=np.float16).byteswap() */ __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 190, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 190, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 190, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 190, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 190, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -23023,7 +25412,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ __pyx_t_2 = 0; goto __pyx_L0; - /* "dataRead.pyx":189 + /* "dataRead.pyx":278 * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) * if swap == 0: # <<<<<<<<<<<<<< @@ -23032,7 +25421,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ */ } - /* "dataRead.pyx":192 + /* "dataRead.pyx":281 * return buf.view(dtype=np.float16) * else: * return buf.view(dtype=np.float16).byteswap() # <<<<<<<<<<<<<< @@ -23041,22 +25430,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 192, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 192, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 192, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; @@ -23077,7 +25466,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_13, 0+__pyx_t_13); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 281, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } @@ -23086,7 +25475,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ goto __pyx_L0; } - /* "dataRead.pyx":181 + /* "dataRead.pyx":270 * return np.asarray(buf).view(dtype=np.float16).byteswap() * * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23119,7 +25508,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ return __pyx_r; } -/* "dataRead.pyx":194 +/* "dataRead.pyx":283 * return buf.view(dtype=np.float16).byteswap() * * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23155,40 +25544,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":196 + /* "dataRead.pyx":285 * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef float temp_float = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 196, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 196, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 285, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 196, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 285, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 196, __pyx_L1_error) + __PYX_ERR(0, 285, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -23196,7 +25585,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":198 + /* "dataRead.pyx":287 * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef float temp_float = 0 # <<<<<<<<<<<<<< @@ -23205,7 +25594,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ */ __pyx_v_temp_float = 0.0; - /* "dataRead.pyx":199 + /* "dataRead.pyx":288 * cdef unsigned long long i * cdef float temp_float = 0 * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -23217,7 +25606,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":200 + /* "dataRead.pyx":289 * cdef float temp_float = 0 * for i in range(number_of_records): * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< @@ -23226,7 +25615,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ */ (void)(memcpy((&__pyx_v_temp_float), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); - /* "dataRead.pyx":201 + /* "dataRead.pyx":290 * for i in range(number_of_records): * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp_float # <<<<<<<<<<<<<< @@ -23237,7 +25626,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_float; } - /* "dataRead.pyx":202 + /* "dataRead.pyx":291 * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp_float * if swap == 0: # <<<<<<<<<<<<<< @@ -23247,7 +25636,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ __pyx_t_10 = (__pyx_v_swap == 0); if (__pyx_t_10) { - /* "dataRead.pyx":203 + /* "dataRead.pyx":292 * buf[i] = temp_float * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -23259,7 +25648,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":202 + /* "dataRead.pyx":291 * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp_float * if swap == 0: # <<<<<<<<<<<<<< @@ -23268,7 +25657,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ */ } - /* "dataRead.pyx":205 + /* "dataRead.pyx":294 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -23277,7 +25666,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -23297,7 +25686,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 205, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -23306,7 +25695,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ goto __pyx_L0; } - /* "dataRead.pyx":194 + /* "dataRead.pyx":283 * return buf.view(dtype=np.float16).byteswap() * * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23338,7 +25727,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ return __pyx_r; } -/* "dataRead.pyx":207 +/* "dataRead.pyx":296 * return buf.byteswap() * * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23374,40 +25763,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":209 + /* "dataRead.pyx":298 * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef float complex temp_cfloat = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 209, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 209, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 209, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 209, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 209, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 298, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 209, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 298, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo___pyx_t_float_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 209, __pyx_L1_error) + __PYX_ERR(0, 298, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -23415,7 +25804,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":211 + /* "dataRead.pyx":300 * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef float complex temp_cfloat = 0 # <<<<<<<<<<<<<< @@ -23424,7 +25813,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v */ __pyx_v_temp_cfloat = __pyx_t_float_complex_from_parts(0, 0); - /* "dataRead.pyx":212 + /* "dataRead.pyx":301 * cdef unsigned long long i * cdef float complex temp_cfloat = 0 * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -23436,7 +25825,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":213 + /* "dataRead.pyx":302 * cdef float complex temp_cfloat = 0 * for i in range(number_of_records): * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) # <<<<<<<<<<<<<< @@ -23445,7 +25834,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v */ (void)(memcpy((&__pyx_v_temp_cfloat), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 8)); - /* "dataRead.pyx":214 + /* "dataRead.pyx":303 * for i in range(number_of_records): * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_cfloat # <<<<<<<<<<<<<< @@ -23456,7 +25845,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v *__Pyx_BufPtrStrided1d(__pyx_t_float_complex *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_cfloat; } - /* "dataRead.pyx":215 + /* "dataRead.pyx":304 * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_cfloat * if swap == 0: # <<<<<<<<<<<<<< @@ -23466,7 +25855,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v __pyx_t_10 = (__pyx_v_swap == 0); if (__pyx_t_10) { - /* "dataRead.pyx":216 + /* "dataRead.pyx":305 * buf[i] = temp_cfloat * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -23478,7 +25867,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":215 + /* "dataRead.pyx":304 * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_cfloat * if swap == 0: # <<<<<<<<<<<<<< @@ -23487,7 +25876,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v */ } - /* "dataRead.pyx":218 + /* "dataRead.pyx":307 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -23496,7 +25885,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -23516,7 +25905,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 218, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 307, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -23525,7 +25914,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v goto __pyx_L0; } - /* "dataRead.pyx":207 + /* "dataRead.pyx":296 * return buf.byteswap() * * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23557,7 +25946,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v return __pyx_r; } -/* "dataRead.pyx":220 +/* "dataRead.pyx":309 * return buf.byteswap() * * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23593,40 +25982,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":222 + /* "dataRead.pyx":311 * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef double temp_double = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 222, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 222, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 311, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 222, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 311, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 222, __pyx_L1_error) + __PYX_ERR(0, 311, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -23634,7 +26023,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":224 + /* "dataRead.pyx":313 * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef double temp_double = 0 # <<<<<<<<<<<<<< @@ -23643,7 +26032,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v */ __pyx_v_temp_double = 0.0; - /* "dataRead.pyx":225 + /* "dataRead.pyx":314 * cdef unsigned long long i * cdef double temp_double = 0 * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -23655,7 +26044,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":226 + /* "dataRead.pyx":315 * cdef double temp_double = 0 * for i in range(number_of_records): * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) # <<<<<<<<<<<<<< @@ -23664,7 +26053,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v */ (void)(memcpy((&__pyx_v_temp_double), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 8)); - /* "dataRead.pyx":227 + /* "dataRead.pyx":316 * for i in range(number_of_records): * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_double # <<<<<<<<<<<<<< @@ -23675,7 +26064,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_double; } - /* "dataRead.pyx":228 + /* "dataRead.pyx":317 * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_double * if swap == 0: # <<<<<<<<<<<<<< @@ -23685,7 +26074,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v __pyx_t_10 = (__pyx_v_swap == 0); if (__pyx_t_10) { - /* "dataRead.pyx":229 + /* "dataRead.pyx":318 * buf[i] = temp_double * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -23697,7 +26086,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":228 + /* "dataRead.pyx":317 * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_double * if swap == 0: # <<<<<<<<<<<<<< @@ -23706,7 +26095,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v */ } - /* "dataRead.pyx":231 + /* "dataRead.pyx":320 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -23715,7 +26104,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -23735,7 +26124,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 320, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -23744,7 +26133,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v goto __pyx_L0; } - /* "dataRead.pyx":220 + /* "dataRead.pyx":309 * return buf.byteswap() * * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23776,7 +26165,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v return __pyx_r; } -/* "dataRead.pyx":233 +/* "dataRead.pyx":322 * return buf.byteswap() * * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23812,40 +26201,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":235 + /* "dataRead.pyx":324 * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef double complex temp_cdouble = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 235, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 235, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 235, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 235, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 324, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 235, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 324, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 235, __pyx_L1_error) + __PYX_ERR(0, 324, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -23853,7 +26242,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":237 + /* "dataRead.pyx":326 * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef double complex temp_cdouble = 0 # <<<<<<<<<<<<<< @@ -23862,7 +26251,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ */ __pyx_v_temp_cdouble = __pyx_t_double_complex_from_parts(0, 0); - /* "dataRead.pyx":238 + /* "dataRead.pyx":327 * cdef unsigned long long i * cdef double complex temp_cdouble = 0 * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -23874,7 +26263,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":239 + /* "dataRead.pyx":328 * cdef double complex temp_cdouble = 0 * for i in range(number_of_records): * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) # <<<<<<<<<<<<<< @@ -23883,7 +26272,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ */ (void)(memcpy((&__pyx_v_temp_cdouble), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 16)); - /* "dataRead.pyx":240 + /* "dataRead.pyx":329 * for i in range(number_of_records): * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) * buf[i] = temp_cdouble # <<<<<<<<<<<<<< @@ -23894,7 +26283,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ *__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_cdouble; } - /* "dataRead.pyx":241 + /* "dataRead.pyx":330 * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) * buf[i] = temp_cdouble * if swap == 0: # <<<<<<<<<<<<<< @@ -23904,7 +26293,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ __pyx_t_10 = (__pyx_v_swap == 0); if (__pyx_t_10) { - /* "dataRead.pyx":242 + /* "dataRead.pyx":331 * buf[i] = temp_cdouble * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -23916,7 +26305,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":241 + /* "dataRead.pyx":330 * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) * buf[i] = temp_cdouble * if swap == 0: # <<<<<<<<<<<<<< @@ -23925,7 +26314,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ */ } - /* "dataRead.pyx":244 + /* "dataRead.pyx":333 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -23934,7 +26323,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -23954,7 +26343,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 333, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -23963,7 +26352,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ goto __pyx_L0; } - /* "dataRead.pyx":233 + /* "dataRead.pyx":322 * return buf.byteswap() * * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -23995,7 +26384,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ return __pyx_r; } -/* "dataRead.pyx":246 +/* "dataRead.pyx":335 * return buf.byteswap() * * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -24031,40 +26420,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":249 + /* "dataRead.pyx":338 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset): * cdef np.ndarray[np.uint8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 249, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 249, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 249, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 249, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 249, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 249, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 249, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 338, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 338, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 249, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 338, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 249, __pyx_L1_error) + __PYX_ERR(0, 338, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -24072,7 +26461,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":251 + /* "dataRead.pyx":340 * cdef np.ndarray[np.uint8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -24081,7 +26470,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":252 + /* "dataRead.pyx":341 * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef unsigned char temp1byte = 0 # <<<<<<<<<<<<<< @@ -24090,7 +26479,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ __pyx_v_temp1byte = 0; - /* "dataRead.pyx":253 + /* "dataRead.pyx":342 * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef unsigned char temp1byte = 0 * if bit_count == 8: # <<<<<<<<<<<<<< @@ -24100,7 +26489,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_t_6 = (__pyx_v_bit_count == 8); if (__pyx_t_6) { - /* "dataRead.pyx":254 + /* "dataRead.pyx":343 * cdef unsigned char temp1byte = 0 * if bit_count == 8: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -24112,7 +26501,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":255 + /* "dataRead.pyx":344 * if bit_count == 8: * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< @@ -24121,7 +26510,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":256 + /* "dataRead.pyx":345 * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * buf[i] = temp1byte # <<<<<<<<<<<<<< @@ -24132,7 +26521,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; } - /* "dataRead.pyx":253 + /* "dataRead.pyx":342 * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef unsigned char temp1byte = 0 * if bit_count == 8: # <<<<<<<<<<<<<< @@ -24142,7 +26531,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * goto __pyx_L3; } - /* "dataRead.pyx":258 + /* "dataRead.pyx":347 * buf[i] = temp1byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -24155,7 +26544,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":259 + /* "dataRead.pyx":348 * else: * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< @@ -24164,7 +26553,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":261 + /* "dataRead.pyx":350 * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -24174,7 +26563,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":262 + /* "dataRead.pyx":351 * # right shift * if bit_offset > 0: * temp1byte = temp1byte >> bit_offset # <<<<<<<<<<<<<< @@ -24183,7 +26572,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ __pyx_v_temp1byte = (__pyx_v_temp1byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":261 + /* "dataRead.pyx":350 * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -24192,7 +26581,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ } - /* "dataRead.pyx":264 + /* "dataRead.pyx":353 * temp1byte = temp1byte >> bit_offset * # mask left part * temp1byte &= mask # <<<<<<<<<<<<<< @@ -24201,7 +26590,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ __pyx_v_temp1byte = (__pyx_v_temp1byte & __pyx_v_mask); - /* "dataRead.pyx":265 + /* "dataRead.pyx":354 * # mask left part * temp1byte &= mask * buf[i] = temp1byte # <<<<<<<<<<<<<< @@ -24214,7 +26603,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * } __pyx_L3:; - /* "dataRead.pyx":266 + /* "dataRead.pyx":355 * temp1byte &= mask * buf[i] = temp1byte * return buf # <<<<<<<<<<<<<< @@ -24226,7 +26615,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":246 + /* "dataRead.pyx":335 * return buf.byteswap() * * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -24258,7 +26647,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * return __pyx_r; } -/* "dataRead.pyx":268 +/* "dataRead.pyx":357 * return buf * * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -24297,40 +26686,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":271 + /* "dataRead.pyx":360 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset): * cdef np.ndarray[np.int8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 271, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 271, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 271, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 271, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 360, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 271, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 360, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 271, __pyx_L1_error) + __PYX_ERR(0, 360, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -24338,7 +26727,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":273 + /* "dataRead.pyx":362 * cdef np.ndarray[np.int8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -24347,7 +26736,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":274 + /* "dataRead.pyx":363 * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef char temp1byte = 0 # <<<<<<<<<<<<<< @@ -24356,7 +26745,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_temp1byte = 0; - /* "dataRead.pyx":275 + /* "dataRead.pyx":364 * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef char temp1byte = 0 * cdef unsigned char sign_bit = 0 # <<<<<<<<<<<<<< @@ -24365,7 +26754,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_sign_bit = 0; - /* "dataRead.pyx":276 + /* "dataRead.pyx":365 * cdef char temp1byte = 0 * cdef unsigned char sign_bit = 0 * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< @@ -24374,7 +26763,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":277 + /* "dataRead.pyx":366 * cdef unsigned char sign_bit = 0 * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< @@ -24383,7 +26772,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_sign_extend = (((1 << (8 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":278 + /* "dataRead.pyx":367 * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count * if bit_count == 8: # <<<<<<<<<<<<<< @@ -24393,7 +26782,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_t_6 = (__pyx_v_bit_count == 8); if (__pyx_t_6) { - /* "dataRead.pyx":279 + /* "dataRead.pyx":368 * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count * if bit_count == 8: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -24405,7 +26794,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":280 + /* "dataRead.pyx":369 * if bit_count == 8: * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< @@ -24414,7 +26803,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":281 + /* "dataRead.pyx":370 * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * buf[i] = temp1byte # <<<<<<<<<<<<<< @@ -24425,7 +26814,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; } - /* "dataRead.pyx":278 + /* "dataRead.pyx":367 * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count * if bit_count == 8: # <<<<<<<<<<<<<< @@ -24435,7 +26824,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ goto __pyx_L3; } - /* "dataRead.pyx":283 + /* "dataRead.pyx":372 * buf[i] = temp1byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -24448,7 +26837,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":284 + /* "dataRead.pyx":373 * else: * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< @@ -24457,7 +26846,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":286 + /* "dataRead.pyx":375 * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -24467,7 +26856,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":287 + /* "dataRead.pyx":376 * # right shift * if bit_offset > 0: * temp1byte = temp1byte >> bit_offset # <<<<<<<<<<<<<< @@ -24476,7 +26865,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_temp1byte = (__pyx_v_temp1byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":286 + /* "dataRead.pyx":375 * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -24485,7 +26874,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ } - /* "dataRead.pyx":289 + /* "dataRead.pyx":378 * temp1byte = temp1byte >> bit_offset * # mask left part * temp1byte &= mask # <<<<<<<<<<<<<< @@ -24494,7 +26883,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_temp1byte = (__pyx_v_temp1byte & __pyx_v_mask); - /* "dataRead.pyx":290 + /* "dataRead.pyx":379 * # mask left part * temp1byte &= mask * sign_bit = temp1byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -24503,7 +26892,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_sign_bit = (__pyx_v_temp1byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":291 + /* "dataRead.pyx":380 * temp1byte &= mask * sign_bit = temp1byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -24513,7 +26902,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":292 + /* "dataRead.pyx":381 * sign_bit = temp1byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp1byte |= sign_extend # <<<<<<<<<<<<<< @@ -24522,7 +26911,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_temp1byte = (__pyx_v_temp1byte | __pyx_v_sign_extend); - /* "dataRead.pyx":291 + /* "dataRead.pyx":380 * temp1byte &= mask * sign_bit = temp1byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -24531,37 +26920,508 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ } - /* "dataRead.pyx":293 - * if sign_bit: # negative value, sign extend - * temp1byte |= sign_extend - * buf[i] = temp1byte # <<<<<<<<<<<<<< - * return buf + /* "dataRead.pyx":382 + * if sign_bit: # negative value, sign extend + * temp1byte |= sign_extend + * buf[i] = temp1byte # <<<<<<<<<<<<<< + * return buf + * + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; + } + } + __pyx_L3:; + + /* "dataRead.pyx":383 + * temp1byte |= sign_extend + * buf[i] = temp1byte + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":357 + * return buf + * + * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset): + */ + + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_signed_char", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":385 + * return buf + * + * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned short __pyx_v_mask; + unsigned short __pyx_v_temp2byte; + unsigned char __pyx_v_temp[2]; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_unsigned_short", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + + /* "dataRead.pyx":388 + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned short mask = ((1 << bit_count) - 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 388, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 388, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 388, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 388, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "dataRead.pyx":390 + * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef unsigned short temp2byte = 0 + * cdef unsigned char temp[2] + */ + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + + /* "dataRead.pyx":391 + * cdef unsigned long long i + * cdef unsigned short mask = ((1 << bit_count) - 1) + * cdef unsigned short temp2byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned char temp[2] + * if bit_count == 16: + */ + __pyx_v_temp2byte = 0; + + /* "dataRead.pyx":393 + * cdef unsigned short temp2byte = 0 + * cdef unsigned char temp[2] + * if bit_count == 16: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + */ + __pyx_t_6 = (__pyx_v_bit_count == 16); + if (__pyx_t_6) { + + /* "dataRead.pyx":394 + * cdef unsigned char temp[2] + * if bit_count == 16: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":395 + * if bit_count == 16: + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * buf[i] = temp2byte + * if swap == 0: + */ + (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + + /* "dataRead.pyx":396 + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte # <<<<<<<<<<<<<< + * if swap == 0: + * return buf + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + } + + /* "dataRead.pyx":397 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":398 + * buf[i] = temp2byte + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":397 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + } + + /* "dataRead.pyx":400 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * else: + * if swap == 0: + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":393 + * cdef unsigned short temp2byte = 0 + * cdef unsigned char temp[2] + * if bit_count == 16: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + */ + } + + /* "dataRead.pyx":402 + * return buf.byteswap() + * else: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + */ + /*else*/ { + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":403 + * else: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * # right shift + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":404 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + + /* "dataRead.pyx":406 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp2byte = temp2byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":407 + * # right shift + * if bit_offset > 0: + * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 16: + */ + __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":406 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp2byte = temp2byte >> bit_offset + * # mask left part + */ + } + + /* "dataRead.pyx":409 + * temp2byte = temp2byte >> bit_offset + * # mask left part + * if bit_count < 16: # <<<<<<<<<<<<<< + * temp2byte &= mask + * buf[i] = temp2byte + */ + __pyx_t_6 = (__pyx_v_bit_count < 16); + if (__pyx_t_6) { + + /* "dataRead.pyx":410 + * # mask left part + * if bit_count < 16: + * temp2byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp2byte + * else: + */ + __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + + /* "dataRead.pyx":409 + * temp2byte = temp2byte >> bit_offset + * # mask left part + * if bit_count < 16: # <<<<<<<<<<<<<< + * temp2byte &= mask + * buf[i] = temp2byte + */ + } + + /* "dataRead.pyx":411 + * if bit_count < 16: + * temp2byte &= mask + * buf[i] = temp2byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + } + + /* "dataRead.pyx":402 + * return buf.byteswap() + * else: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + */ + goto __pyx_L7; + } + + /* "dataRead.pyx":413 + * buf[i] = temp2byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * temp2byte = temp[0]<<8 | temp[1] # swap bytes + */ + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":414 + * else: + * for i in range(number_of_records): + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * temp2byte = temp[0]<<8 | temp[1] # swap bytes + * # right shift + */ + (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + + /* "dataRead.pyx":415 + * for i in range(number_of_records): + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); + + /* "dataRead.pyx":417 + * temp2byte = temp[0]<<8 | temp[1] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp2byte = temp2byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":418 + * # right shift + * if bit_offset > 0: + * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 16: + */ + __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":417 + * temp2byte = temp[0]<<8 | temp[1] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp2byte = temp2byte >> bit_offset + * # mask left part + */ + } + + /* "dataRead.pyx":420 + * temp2byte = temp2byte >> bit_offset + * # mask left part + * if bit_count < 16: # <<<<<<<<<<<<<< + * temp2byte &= mask + * buf[i] = temp2byte + */ + __pyx_t_6 = (__pyx_v_bit_count < 16); + if (__pyx_t_6) { + + /* "dataRead.pyx":421 + * # mask left part + * if bit_count < 16: + * temp2byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp2byte + * return buf + */ + __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + + /* "dataRead.pyx":420 + * temp2byte = temp2byte >> bit_offset + * # mask left part + * if bit_count < 16: # <<<<<<<<<<<<<< + * temp2byte &= mask + * buf[i] = temp2byte + */ + } + + /* "dataRead.pyx":422 + * if bit_count < 16: + * temp2byte &= mask + * buf[i] = temp2byte # <<<<<<<<<<<<<< + * return buf * */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + } } - } - __pyx_L3:; + __pyx_L7:; - /* "dataRead.pyx":294 - * temp1byte |= sign_extend - * buf[i] = temp1byte - * return buf # <<<<<<<<<<<<<< + /* "dataRead.pyx":423 + * temp2byte &= mask + * buf[i] = temp2byte + * return buf # <<<<<<<<<<<<<< * - * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, + * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + } - /* "dataRead.pyx":268 + /* "dataRead.pyx":385 * return buf * - * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset): + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ /* function exit code */ @@ -24576,7 +27436,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_signed_char", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.read_unsigned_short", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; @@ -24588,19 +27448,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ return __pyx_r; } -/* "dataRead.pyx":296 - * return buf +/* "dataRead.pyx":425 + * return buf * - * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; unsigned short __pyx_v_mask; - unsigned short __pyx_v_temp2byte; + short __pyx_v_temp2byte; + unsigned short __pyx_v_sign_bit; + unsigned short __pyx_v_sign_bit_mask; + unsigned short __pyx_v_sign_extend; unsigned char __pyx_v_temp[2]; __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; __Pyx_Buffer __pyx_pybuffer_buf; @@ -24620,46 +27483,46 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_unsigned_short", 1); + __Pyx_RefNannySetupContext("read_signed_short", 1); __pyx_pybuffer_buf.pybuffer.buf = NULL; __pyx_pybuffer_buf.refcount = 0; __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":299 + /* "dataRead.pyx":428 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): - * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 299, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 299, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 299, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 299, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 299, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 428, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 299, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 428, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 299, __pyx_L1_error) + __PYX_ERR(0, 428, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -24667,26 +27530,53 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":301 - * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":430 + * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef unsigned short temp2byte = 0 - * cdef unsigned char temp[2] + * cdef short temp2byte = 0 + * cdef unsigned short sign_bit = 0 */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":302 + /* "dataRead.pyx":431 * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) - * cdef unsigned short temp2byte = 0 # <<<<<<<<<<<<<< + * cdef short temp2byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned short sign_bit = 0 + * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) + */ + __pyx_v_temp2byte = 0; + + /* "dataRead.pyx":432 + * cdef unsigned short mask = ((1 << bit_count) - 1) + * cdef short temp2byte = 0 + * cdef unsigned short sign_bit = 0 # <<<<<<<<<<<<<< + * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count + */ + __pyx_v_sign_bit = 0; + + /* "dataRead.pyx":433 + * cdef short temp2byte = 0 + * cdef unsigned short sign_bit = 0 + * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count + * cdef unsigned char temp[2] + */ + __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); + + /* "dataRead.pyx":434 + * cdef unsigned short sign_bit = 0 + * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< * cdef unsigned char temp[2] * if bit_count == 16: */ - __pyx_v_temp2byte = 0; + __pyx_v_sign_extend = (((1 << (16 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":304 - * cdef unsigned short temp2byte = 0 + /* "dataRead.pyx":436 + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count * cdef unsigned char temp[2] * if bit_count == 16: # <<<<<<<<<<<<<< * for i in range(number_of_records): @@ -24695,7 +27585,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_bit_count == 16); if (__pyx_t_6) { - /* "dataRead.pyx":305 + /* "dataRead.pyx":437 * cdef unsigned char temp[2] * if bit_count == 16: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -24707,7 +27597,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":306 + /* "dataRead.pyx":438 * if bit_count == 16: * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -24716,7 +27606,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":307 + /* "dataRead.pyx":439 * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte # <<<<<<<<<<<<<< @@ -24724,10 +27614,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const * return buf */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":308 + /* "dataRead.pyx":440 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte * if swap == 0: # <<<<<<<<<<<<<< @@ -24737,7 +27627,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":309 + /* "dataRead.pyx":441 * buf[i] = temp2byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -24749,7 +27639,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":308 + /* "dataRead.pyx":440 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte * if swap == 0: # <<<<<<<<<<<<<< @@ -24758,7 +27648,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":311 + /* "dataRead.pyx":443 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -24767,7 +27657,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -24787,7 +27677,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 311, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -24796,8 +27686,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const goto __pyx_L0; } - /* "dataRead.pyx":304 - * cdef unsigned short temp2byte = 0 + /* "dataRead.pyx":436 + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count * cdef unsigned char temp[2] * if bit_count == 16: # <<<<<<<<<<<<<< * for i in range(number_of_records): @@ -24805,7 +27695,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":313 + /* "dataRead.pyx":445 * return buf.byteswap() * else: * if swap == 0: # <<<<<<<<<<<<<< @@ -24816,7 +27706,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":314 + /* "dataRead.pyx":446 * else: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -24828,7 +27718,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":315 + /* "dataRead.pyx":447 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -24837,7 +27727,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":317 + /* "dataRead.pyx":449 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -24847,16 +27737,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":318 + /* "dataRead.pyx":450 * # right shift * if bit_offset > 0: * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 16: + * temp2byte &= mask */ __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":317 + /* "dataRead.pyx":449 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -24865,46 +27755,64 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":320 + /* "dataRead.pyx":452 * temp2byte = temp2byte >> bit_offset * # mask left part - * if bit_count < 16: # <<<<<<<<<<<<<< - * temp2byte &= mask + * temp2byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp2byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + */ + __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + + /* "dataRead.pyx":453 + * # mask left part + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp2byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":454 + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp2byte |= sign_extend * buf[i] = temp2byte */ - __pyx_t_6 = (__pyx_v_bit_count < 16); + __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":321 - * # mask left part - * if bit_count < 16: - * temp2byte &= mask # <<<<<<<<<<<<<< + /* "dataRead.pyx":455 + * sign_bit = temp2byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp2byte |= sign_extend # <<<<<<<<<<<<<< * buf[i] = temp2byte * else: */ - __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); - /* "dataRead.pyx":320 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * if bit_count < 16: # <<<<<<<<<<<<<< - * temp2byte &= mask + /* "dataRead.pyx":454 + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp2byte |= sign_extend * buf[i] = temp2byte */ } - /* "dataRead.pyx":322 - * if bit_count < 16: - * temp2byte &= mask + /* "dataRead.pyx":456 + * if sign_bit: # negative value, sign extend + * temp2byte |= sign_extend * buf[i] = temp2byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":313 + /* "dataRead.pyx":445 * return buf.byteswap() * else: * if swap == 0: # <<<<<<<<<<<<<< @@ -24914,7 +27822,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const goto __pyx_L7; } - /* "dataRead.pyx":324 + /* "dataRead.pyx":458 * buf[i] = temp2byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -24927,7 +27835,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":325 + /* "dataRead.pyx":459 * else: * for i in range(number_of_records): * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -24936,7 +27844,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":326 + /* "dataRead.pyx":460 * for i in range(number_of_records): * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< @@ -24945,7 +27853,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); - /* "dataRead.pyx":328 + /* "dataRead.pyx":462 * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -24955,16 +27863,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":329 + /* "dataRead.pyx":463 * # right shift * if bit_offset > 0: * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 16: + * temp2byte &= mask */ __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":328 + /* "dataRead.pyx":462 * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -24973,53 +27881,71 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":331 + /* "dataRead.pyx":465 * temp2byte = temp2byte >> bit_offset * # mask left part - * if bit_count < 16: # <<<<<<<<<<<<<< - * temp2byte &= mask + * temp2byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp2byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + */ + __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + + /* "dataRead.pyx":466 + * # mask left part + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp2byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":467 + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp2byte |= sign_extend * buf[i] = temp2byte */ - __pyx_t_6 = (__pyx_v_bit_count < 16); + __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":332 - * # mask left part - * if bit_count < 16: - * temp2byte &= mask # <<<<<<<<<<<<<< + /* "dataRead.pyx":468 + * sign_bit = temp2byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp2byte |= sign_extend # <<<<<<<<<<<<<< * buf[i] = temp2byte * return buf */ - __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); - /* "dataRead.pyx":331 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * if bit_count < 16: # <<<<<<<<<<<<<< - * temp2byte &= mask + /* "dataRead.pyx":467 + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp2byte |= sign_extend * buf[i] = temp2byte */ } - /* "dataRead.pyx":333 - * if bit_count < 16: - * temp2byte &= mask + /* "dataRead.pyx":469 + * if sign_bit: # negative value, sign extend + * temp2byte |= sign_extend * buf[i] = temp2byte # <<<<<<<<<<<<<< * return buf * */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } } __pyx_L7:; - /* "dataRead.pyx":334 - * temp2byte &= mask + /* "dataRead.pyx":470 + * temp2byte |= sign_extend * buf[i] = temp2byte * return buf # <<<<<<<<<<<<<< * - * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, + * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_buf); @@ -25027,10 +27953,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const goto __pyx_L0; } - /* "dataRead.pyx":296 - * return buf + /* "dataRead.pyx":425 + * return buf * - * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ @@ -25047,7 +27973,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_unsigned_short", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.read_signed_short", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; @@ -25059,23 +27985,21 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const return __pyx_r; } -/* "dataRead.pyx":336 +/* "dataRead.pyx":472 * return buf * - * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; - unsigned short __pyx_v_mask; - short __pyx_v_temp2byte; - unsigned short __pyx_v_sign_bit; - unsigned short __pyx_v_sign_bit_mask; - unsigned short __pyx_v_sign_extend; - unsigned char __pyx_v_temp[2]; + unsigned int __pyx_v_mask; + unsigned int __pyx_v_temp4byte; + unsigned char __pyx_v_temp4[4]; + unsigned char __pyx_v_temp3[3]; __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; __Pyx_Buffer __pyx_pybuffer_buf; PyObject *__pyx_r = NULL; @@ -25094,46 +28018,46 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_signed_short", 1); + __Pyx_RefNannySetupContext("read_unsigned_int", 1); __pyx_pybuffer_buf.pybuffer.buf = NULL; __pyx_pybuffer_buf.refcount = 0; __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":339 + /* "dataRead.pyx":475 * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): - * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) + * cdef unsigned int mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 339, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 339, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 339, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 339, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 339, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 475, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 339, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 475, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 339, __pyx_L1_error) + __PYX_ERR(0, 475, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -25141,187 +28065,399 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":341 - * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":477 + * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef short temp2byte = 0 - * cdef unsigned short sign_bit = 0 + * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef unsigned int temp4byte = 0 + * cdef unsigned char temp4[4] */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":342 + /* "dataRead.pyx":478 * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) - * cdef short temp2byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned short sign_bit = 0 - * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned int mask = ((1 << bit_count) - 1) + * cdef unsigned int temp4byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] */ - __pyx_v_temp2byte = 0; + __pyx_v_temp4byte = 0; - /* "dataRead.pyx":343 - * cdef unsigned short mask = ((1 << bit_count) - 1) - * cdef short temp2byte = 0 - * cdef unsigned short sign_bit = 0 # <<<<<<<<<<<<<< - * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count + /* "dataRead.pyx":481 + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] + * if bit_count == 32: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) */ - __pyx_v_sign_bit = 0; + __pyx_t_6 = (__pyx_v_bit_count == 32); + if (__pyx_t_6) { - /* "dataRead.pyx":344 - * cdef short temp2byte = 0 - * cdef unsigned short sign_bit = 0 - * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count - * cdef unsigned char temp[2] + /* "dataRead.pyx":482 + * cdef unsigned char temp3[3] + * if bit_count == 32: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte */ - __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":345 - * cdef unsigned short sign_bit = 0 - * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< - * cdef unsigned char temp[2] - * if bit_count == 16: + /* "dataRead.pyx":483 + * if bit_count == 32: + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * if swap == 0: */ - __pyx_v_sign_extend = (((1 << (16 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); + + /* "dataRead.pyx":484 + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * if swap == 0: + * return buf + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } + + /* "dataRead.pyx":485 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":486 + * buf[i] = temp4byte + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":485 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + } + + /* "dataRead.pyx":488 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * elif n_bytes == 4: + * if swap == 0: + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":481 + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] + * if bit_count == 32: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + */ + } + + /* "dataRead.pyx":489 + * else: + * return buf.byteswap() + * elif n_bytes == 4: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): + */ + __pyx_t_6 = (__pyx_v_n_bytes == 4); + if (__pyx_t_6) { + + /* "dataRead.pyx":490 + * return buf.byteswap() + * elif n_bytes == 4: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":491 + * elif n_bytes == 4: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":492 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + + /* "dataRead.pyx":494 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":495 + * # right shift + * if bit_offset > 0: + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 32: + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":494 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part + */ + } + + /* "dataRead.pyx":497 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte + */ + __pyx_t_6 = (__pyx_v_bit_count < 32); + if (__pyx_t_6) { + + /* "dataRead.pyx":498 + * # mask left part + * if bit_count < 32: + * temp4byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * else: + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); + + /* "dataRead.pyx":497 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte + */ + } + + /* "dataRead.pyx":499 + * if bit_count < 32: + * temp4byte &= mask + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } + + /* "dataRead.pyx":490 + * return buf.byteswap() + * elif n_bytes == 4: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + goto __pyx_L7; + } + + /* "dataRead.pyx":501 + * buf[i] = temp4byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + */ + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":502 + * else: + * for i in range(number_of_records): + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + * # right shift + */ + (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + + /* "dataRead.pyx":503 + * for i in range(number_of_records): + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); - /* "dataRead.pyx":347 - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count - * cdef unsigned char temp[2] - * if bit_count == 16: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":505 + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - __pyx_t_6 = (__pyx_v_bit_count == 16); - if (__pyx_t_6) { + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":348 - * cdef unsigned char temp[2] - * if bit_count == 16: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte + /* "dataRead.pyx":506 + * # right shift + * if bit_offset > 0: + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 32: */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":349 - * if bit_count == 16: - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * buf[i] = temp2byte - * if swap == 0: + /* "dataRead.pyx":505 + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + } - /* "dataRead.pyx":350 - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":508 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; - } + __pyx_t_6 = (__pyx_v_bit_count < 32); + if (__pyx_t_6) { - /* "dataRead.pyx":351 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":509 + * # mask left part + * if bit_count < 32: + * temp4byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * return buf */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":352 - * buf[i] = temp2byte - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":508 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + } - /* "dataRead.pyx":351 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":510 + * if bit_count < 32: + * temp4byte &= mask + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * return buf + * else: # on 3 bytes */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } } + __pyx_L7:; - /* "dataRead.pyx":354 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * else: + /* "dataRead.pyx":511 + * temp4byte &= mask + * buf[i] = temp4byte + * return buf # <<<<<<<<<<<<<< + * else: # on 3 bytes * if swap == 0: */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 354, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":347 - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count - * cdef unsigned char temp[2] - * if bit_count == 16: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":489 + * else: + * return buf.byteswap() + * elif n_bytes == 4: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ } - /* "dataRead.pyx":356 - * return buf.byteswap() - * else: + /* "dataRead.pyx":513 + * return buf + * else: # on 3 bytes * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ /*else*/ { __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":357 - * else: + /* "dataRead.pyx":514 + * else: # on 3 bytes * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift */ __pyx_t_7 = __pyx_v_number_of_records; @@ -25329,116 +28465,98 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":358 + /* "dataRead.pyx":515 * if swap == 0: * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":360 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":517 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset + * temp4byte = temp4byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":361 + /* "dataRead.pyx":518 * # right shift * if bit_offset > 0: - * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * temp2byte &= mask + * if bit_count < 24: */ - __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":360 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":517 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset + * temp4byte = temp4byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":363 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * temp2byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - - /* "dataRead.pyx":364 + /* "dataRead.pyx":520 + * temp4byte = temp4byte >> bit_offset * # mask left part - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":365 - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp2byte |= sign_extend - * buf[i] = temp2byte + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); + __pyx_t_6 = (__pyx_v_bit_count < 24); if (__pyx_t_6) { - /* "dataRead.pyx":366 - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp2byte + /* "dataRead.pyx":521 + * # mask left part + * if bit_count < 24: + * temp4byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp4byte * else: */ - __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":365 - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp2byte |= sign_extend - * buf[i] = temp2byte + /* "dataRead.pyx":520 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ } - /* "dataRead.pyx":367 - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend - * buf[i] = temp2byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":522 + * if bit_count < 24: + * temp4byte &= mask + * buf[i] = temp4byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":356 - * return buf.byteswap() - * else: + /* "dataRead.pyx":513 + * return buf + * else: # on 3 bytes * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L7; + goto __pyx_L16; } - /* "dataRead.pyx":369 - * buf[i] = temp2byte + /* "dataRead.pyx":524 + * buf[i] = temp4byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * temp2byte = temp[0]<<8 | temp[1] # swap bytes + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -25446,117 +28564,99 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":370 + /* "dataRead.pyx":525 * else: * for i in range(number_of_records): - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * temp2byte = temp[0]<<8 | temp[1] # swap bytes + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift */ - (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":371 + /* "dataRead.pyx":526 * for i in range(number_of_records): - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); + __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); - /* "dataRead.pyx":373 - * temp2byte = temp[0]<<8 | temp[1] # swap bytes + /* "dataRead.pyx":528 + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset + * temp4byte = temp4byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":374 + /* "dataRead.pyx":529 * # right shift * if bit_offset > 0: - * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * temp2byte &= mask + * if bit_count < 24: */ - __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":373 - * temp2byte = temp[0]<<8 | temp[1] # swap bytes + /* "dataRead.pyx":528 + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset + * temp4byte = temp4byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":376 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * temp2byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - - /* "dataRead.pyx":377 + /* "dataRead.pyx":531 + * temp4byte = temp4byte >> bit_offset * # mask left part - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":378 - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp2byte |= sign_extend - * buf[i] = temp2byte + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); + __pyx_t_6 = (__pyx_v_bit_count < 24); if (__pyx_t_6) { - /* "dataRead.pyx":379 - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp2byte + /* "dataRead.pyx":532 + * # mask left part + * if bit_count < 24: + * temp4byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp4byte * return buf */ - __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":378 - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp2byte |= sign_extend - * buf[i] = temp2byte + /* "dataRead.pyx":531 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ } - /* "dataRead.pyx":380 - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend - * buf[i] = temp2byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":533 + * if bit_count < 24: + * temp4byte &= mask + * buf[i] = temp4byte # <<<<<<<<<<<<<< * return buf * */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } } - __pyx_L7:; + __pyx_L16:; - /* "dataRead.pyx":381 - * temp2byte |= sign_extend - * buf[i] = temp2byte + /* "dataRead.pyx":534 + * temp4byte &= mask + * buf[i] = temp4byte * return buf # <<<<<<<<<<<<<< * - * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, + * */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_buf); @@ -25564,12 +28664,12 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ goto __pyx_L0; } - /* "dataRead.pyx":336 + /* "dataRead.pyx":472 * return buf * - * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ /* function exit code */ @@ -25584,7 +28684,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_signed_short", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.read_unsigned_int", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; @@ -25596,19 +28696,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ return __pyx_r; } -/* "dataRead.pyx":383 - * return buf +/* "dataRead.pyx":537 * - * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * + * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; unsigned int __pyx_v_mask; - unsigned int __pyx_v_temp4byte; + int __pyx_v_temp4byte; + unsigned int __pyx_v_sign_bit; + unsigned int __pyx_v_sign_bit_mask; + unsigned int __pyx_v_sign_extend; unsigned char __pyx_v_temp4[4]; unsigned char __pyx_v_temp3[3]; __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; @@ -25629,46 +28732,46 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_unsigned_int", 1); + __Pyx_RefNannySetupContext("read_signed_int", 1); __pyx_pybuffer_buf.pybuffer.buf = NULL; __pyx_pybuffer_buf.refcount = 0; __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":386 + /* "dataRead.pyx":540 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 386, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 386, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 386, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 386, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 386, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 386, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 540, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 386, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 540, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 386, __pyx_L1_error) + __PYX_ERR(0, 540, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -25676,25 +28779,52 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":388 - * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":542 + * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef unsigned int temp4byte = 0 - * cdef unsigned char temp4[4] + * cdef int temp4byte = 0 + * cdef unsigned int sign_bit = 0 */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":389 + /* "dataRead.pyx":543 * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) - * cdef unsigned int temp4byte = 0 # <<<<<<<<<<<<<< + * cdef int temp4byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned int sign_bit = 0 + * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) + */ + __pyx_v_temp4byte = 0; + + /* "dataRead.pyx":544 + * cdef unsigned int mask = ((1 << bit_count) - 1) + * cdef int temp4byte = 0 + * cdef unsigned int sign_bit = 0 # <<<<<<<<<<<<<< + * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count + */ + __pyx_v_sign_bit = 0; + + /* "dataRead.pyx":545 + * cdef int temp4byte = 0 + * cdef unsigned int sign_bit = 0 + * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< + * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count + * cdef unsigned char temp4[4] + */ + __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); + + /* "dataRead.pyx":546 + * cdef unsigned int sign_bit = 0 + * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< * cdef unsigned char temp4[4] * cdef unsigned char temp3[3] */ - __pyx_v_temp4byte = 0; + __pyx_v_sign_extend = (((1 << (32 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":392 + /* "dataRead.pyx":549 * cdef unsigned char temp4[4] * cdef unsigned char temp3[3] * if bit_count == 32: # <<<<<<<<<<<<<< @@ -25704,7 +28834,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_count == 32); if (__pyx_t_6) { - /* "dataRead.pyx":393 + /* "dataRead.pyx":550 * cdef unsigned char temp3[3] * if bit_count == 32: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -25716,7 +28846,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":394 + /* "dataRead.pyx":551 * if bit_count == 32: * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< @@ -25725,7 +28855,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); - /* "dataRead.pyx":395 + /* "dataRead.pyx":552 * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -25733,10 +28863,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ * return buf */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":396 + /* "dataRead.pyx":553 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte * if swap == 0: # <<<<<<<<<<<<<< @@ -25746,7 +28876,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":397 + /* "dataRead.pyx":554 * buf[i] = temp4byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -25758,7 +28888,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":396 + /* "dataRead.pyx":553 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte * if swap == 0: # <<<<<<<<<<<<<< @@ -25767,7 +28897,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":399 + /* "dataRead.pyx":556 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -25776,7 +28906,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 399, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -25796,7 +28926,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 399, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -25805,7 +28935,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ goto __pyx_L0; } - /* "dataRead.pyx":392 + /* "dataRead.pyx":549 * cdef unsigned char temp4[4] * cdef unsigned char temp3[3] * if bit_count == 32: # <<<<<<<<<<<<<< @@ -25814,7 +28944,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":400 + /* "dataRead.pyx":557 * else: * return buf.byteswap() * elif n_bytes == 4: # <<<<<<<<<<<<<< @@ -25824,7 +28954,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_n_bytes == 4); if (__pyx_t_6) { - /* "dataRead.pyx":401 + /* "dataRead.pyx":558 * return buf.byteswap() * elif n_bytes == 4: * if swap == 0: # <<<<<<<<<<<<<< @@ -25834,7 +28964,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":402 + /* "dataRead.pyx":559 * elif n_bytes == 4: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -25846,7 +28976,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":403 + /* "dataRead.pyx":560 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -25855,7 +28985,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":405 + /* "dataRead.pyx":562 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -25865,7 +28995,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":406 + /* "dataRead.pyx":563 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -25874,7 +29004,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":405 + /* "dataRead.pyx":562 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -25883,46 +29013,83 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":408 + /* "dataRead.pyx":565 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< * temp4byte &= mask - * buf[i] = temp4byte + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":409 + /* "dataRead.pyx":566 * # mask left part * if bit_count < 32: * temp4byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * else: + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":408 + /* "dataRead.pyx":565 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< * temp4byte &= mask - * buf[i] = temp4byte + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ } - /* "dataRead.pyx":410 + /* "dataRead.pyx":567 * if bit_count < 32: * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":568 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":569 + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * else: + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":568 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + } + + /* "dataRead.pyx":570 + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend * buf[i] = temp4byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":401 + /* "dataRead.pyx":558 * return buf.byteswap() * elif n_bytes == 4: * if swap == 0: # <<<<<<<<<<<<<< @@ -25932,7 +29099,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ goto __pyx_L7; } - /* "dataRead.pyx":412 + /* "dataRead.pyx":572 * buf[i] = temp4byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -25945,7 +29112,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":413 + /* "dataRead.pyx":573 * else: * for i in range(number_of_records): * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -25954,7 +29121,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":414 + /* "dataRead.pyx":574 * for i in range(number_of_records): * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< @@ -25963,7 +29130,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); - /* "dataRead.pyx":416 + /* "dataRead.pyx":576 * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -25973,7 +29140,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":417 + /* "dataRead.pyx":577 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -25982,7 +29149,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":416 + /* "dataRead.pyx":576 * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -25991,49 +29158,86 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":419 + /* "dataRead.pyx":579 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< * temp4byte &= mask - * buf[i] = temp4byte + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":420 + /* "dataRead.pyx":580 * # mask left part * if bit_count < 32: * temp4byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * return buf + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":419 + /* "dataRead.pyx":579 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< * temp4byte &= mask - * buf[i] = temp4byte + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ } - /* "dataRead.pyx":421 + /* "dataRead.pyx":581 * if bit_count < 32: * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":582 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":583 + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * return buf + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":582 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + } + + /* "dataRead.pyx":584 + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend * buf[i] = temp4byte # <<<<<<<<<<<<<< * return buf * else: # on 3 bytes */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } } __pyx_L7:; - /* "dataRead.pyx":422 - * temp4byte &= mask + /* "dataRead.pyx":585 + * temp4byte |= sign_extend * buf[i] = temp4byte * return buf # <<<<<<<<<<<<<< * else: # on 3 bytes @@ -26044,7 +29248,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":400 + /* "dataRead.pyx":557 * else: * return buf.byteswap() * elif n_bytes == 4: # <<<<<<<<<<<<<< @@ -26053,39 +29257,48 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":424 + /* "dataRead.pyx":587 * return buf * else: # on 3 bytes * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF */ /*else*/ { __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":425 + /* "dataRead.pyx":588 * else: # on 3 bytes * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift */ __pyx_t_7 = __pyx_v_number_of_records; __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":426 + /* "dataRead.pyx":589 * if swap == 0: * for i in range(number_of_records): + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + */ + __pyx_v_temp4byte = 0; + + /* "dataRead.pyx":590 + * for i in range(number_of_records): + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":428 + /* "dataRead.pyx":592 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -26095,7 +29308,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":429 + /* "dataRead.pyx":593 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -26104,7 +29317,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":428 + /* "dataRead.pyx":592 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -26113,56 +29326,93 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":431 + /* "dataRead.pyx":595 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< * temp4byte &= mask - * buf[i] = temp4byte + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ __pyx_t_6 = (__pyx_v_bit_count < 24); if (__pyx_t_6) { - /* "dataRead.pyx":432 + /* "dataRead.pyx":596 * # mask left part * if bit_count < 24: * temp4byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * else: + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":431 + /* "dataRead.pyx":595 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< * temp4byte &= mask - * buf[i] = temp4byte + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ } - /* "dataRead.pyx":433 + /* "dataRead.pyx":597 * if bit_count < 24: * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":598 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":599 + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * else: + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":598 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + } + + /* "dataRead.pyx":600 + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend * buf[i] = temp4byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":424 + /* "dataRead.pyx":587 * return buf * else: # on 3 bytes * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF */ - goto __pyx_L16; + goto __pyx_L18; } - /* "dataRead.pyx":435 + /* "dataRead.pyx":602 * buf[i] = temp4byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -26175,7 +29425,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":436 + /* "dataRead.pyx":603 * else: * for i in range(number_of_records): * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -26184,7 +29434,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":437 + /* "dataRead.pyx":604 * for i in range(number_of_records): * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< @@ -26193,7 +29443,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); - /* "dataRead.pyx":439 + /* "dataRead.pyx":606 * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -26203,7 +29453,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":440 + /* "dataRead.pyx":607 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -26212,7 +29462,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":439 + /* "dataRead.pyx":606 * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -26221,53 +29471,90 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":442 + /* "dataRead.pyx":609 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< * temp4byte &= mask - * buf[i] = temp4byte + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ __pyx_t_6 = (__pyx_v_bit_count < 24); if (__pyx_t_6) { - /* "dataRead.pyx":443 + /* "dataRead.pyx":610 * # mask left part * if bit_count < 24: * temp4byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * return buf + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":442 + /* "dataRead.pyx":609 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< * temp4byte &= mask - * buf[i] = temp4byte + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ } - /* "dataRead.pyx":444 + /* "dataRead.pyx":611 * if bit_count < 24: * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":612 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":613 + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * return buf + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":612 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + } + + /* "dataRead.pyx":614 + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend * buf[i] = temp4byte # <<<<<<<<<<<<<< * return buf * */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } } - __pyx_L16:; + __pyx_L18:; - /* "dataRead.pyx":445 - * temp4byte &= mask + /* "dataRead.pyx":615 + * temp4byte |= sign_extend * buf[i] = temp4byte * return buf # <<<<<<<<<<<<<< * - * + * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_buf); @@ -26275,10 +29562,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ goto __pyx_L0; } - /* "dataRead.pyx":383 - * return buf + /* "dataRead.pyx":537 * - * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * + * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ @@ -26295,7 +29582,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_unsigned_int", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.read_signed_int", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; @@ -26307,24 +29594,23 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ return __pyx_r; } -/* "dataRead.pyx":448 - * +/* "dataRead.pyx":617 + * return buf * - * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; - unsigned int __pyx_v_mask; - int __pyx_v_temp4byte; - unsigned int __pyx_v_sign_bit; - unsigned int __pyx_v_sign_bit_mask; - unsigned int __pyx_v_sign_extend; - unsigned char __pyx_v_temp4[4]; - unsigned char __pyx_v_temp3[3]; + unsigned PY_LONG_LONG __pyx_v_mask; + unsigned PY_LONG_LONG __pyx_v_temp8byte; + unsigned char __pyx_v_temp8[8]; + unsigned char __pyx_v_temp7[7]; + unsigned char __pyx_v_temp6[6]; + unsigned char __pyx_v_temp5[5]; __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; __Pyx_Buffer __pyx_pybuffer_buf; PyObject *__pyx_r = NULL; @@ -26343,46 +29629,46 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_signed_int", 1); + __Pyx_RefNannySetupContext("read_unsigned_longlong", 1); __pyx_pybuffer_buf.pybuffer.buf = NULL; __pyx_pybuffer_buf.refcount = 0; __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":451 + /* "dataRead.pyx":620 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) + * cdef unsigned long long mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 451, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 451, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 620, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 451, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 451, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 451, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 620, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 620, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 451, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 620, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 451, __pyx_L1_error) + __PYX_ERR(0, 620, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -26390,196 +29676,625 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":453 - * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":622 + * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef int temp4byte = 0 - * cdef unsigned int sign_bit = 0 + * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef unsigned long long temp8byte = 0 + * cdef unsigned char temp8[8] + */ + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + + /* "dataRead.pyx":623 + * cdef unsigned long long i + * cdef unsigned long long mask = ((1 << bit_count) - 1) + * cdef unsigned long long temp8byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned char temp8[8] + * cdef unsigned char temp7[7] + */ + __pyx_v_temp8byte = 0; + + /* "dataRead.pyx":628 + * cdef unsigned char temp6[6] + * cdef unsigned char temp5[5] + * if bit_count == 64: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + __pyx_t_6 = (__pyx_v_bit_count == 64); + if (__pyx_t_6) { + + /* "dataRead.pyx":629 + * cdef unsigned char temp5[5] + * if bit_count == 64: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":630 + * if bit_count == 64: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * if swap == 0: + */ + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + + /* "dataRead.pyx":631 + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * if swap == 0: + * return buf + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } + + /* "dataRead.pyx":632 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":633 + * buf[i] = temp8byte + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":632 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + } + + /* "dataRead.pyx":635 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * elif n_bytes == 8: + * if swap == 0: + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 635, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":628 + * cdef unsigned char temp6[6] + * cdef unsigned char temp5[5] + * if bit_count == 64: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + } + + /* "dataRead.pyx":636 + * else: + * return buf.byteswap() + * elif n_bytes == 8: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): + */ + __pyx_t_6 = (__pyx_v_n_bytes == 8); + if (__pyx_t_6) { + + /* "dataRead.pyx":637 + * return buf.byteswap() + * elif n_bytes == 8: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":638 + * elif n_bytes == 8: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":639 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + + /* "dataRead.pyx":641 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":642 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 64: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":641 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + } + + /* "dataRead.pyx":644 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_bit_count < 64); + if (__pyx_t_6) { + + /* "dataRead.pyx":645 + * # mask left part + * if bit_count < 64: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + + /* "dataRead.pyx":644 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":646 + * if bit_count < 64: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } + + /* "dataRead.pyx":637 + * return buf.byteswap() + * elif n_bytes == 8: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + goto __pyx_L7; + } + + /* "dataRead.pyx":648 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + */ + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":649 + * else: + * for i in range(number_of_records): + * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * temp8[2]<<40 | temp8[3]<<32 | \ + */ + (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + + /* "dataRead.pyx":652 + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * temp8[2]<<40 | temp8[3]<<32 | \ + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); + + /* "dataRead.pyx":654 + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":655 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 64: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":654 + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + } + + /* "dataRead.pyx":657 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_bit_count < 64); + if (__pyx_t_6) { + + /* "dataRead.pyx":658 + * # mask left part + * if bit_count < 64: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 7: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + + /* "dataRead.pyx":657 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":659 + * if bit_count < 64: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 7: + * if swap == 0: + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } + } + __pyx_L7:; + + /* "dataRead.pyx":636 + * else: + * return buf.byteswap() + * elif n_bytes == 8: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): + */ + goto __pyx_L3; + } + + /* "dataRead.pyx":660 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 7: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): + */ + __pyx_t_6 = (__pyx_v_n_bytes == 7); + if (__pyx_t_6) { + + /* "dataRead.pyx":661 + * buf[i] = temp8byte + * elif n_bytes == 7: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":662 + * elif n_bytes == 7: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":663 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":454 - * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) - * cdef int temp4byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned int sign_bit = 0 - * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) + /* "dataRead.pyx":665 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_v_temp4byte = 0; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":455 - * cdef unsigned int mask = ((1 << bit_count) - 1) - * cdef int temp4byte = 0 - * cdef unsigned int sign_bit = 0 # <<<<<<<<<<<<<< - * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count + /* "dataRead.pyx":666 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 56: */ - __pyx_v_sign_bit = 0; + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":456 - * cdef int temp4byte = 0 - * cdef unsigned int sign_bit = 0 - * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< - * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count - * cdef unsigned char temp4[4] + /* "dataRead.pyx":665 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); + } - /* "dataRead.pyx":457 - * cdef unsigned int sign_bit = 0 - * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] + /* "dataRead.pyx":668 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_v_sign_extend = (((1 << (32 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); + __pyx_t_6 = (__pyx_v_bit_count < 56); + if (__pyx_t_6) { - /* "dataRead.pyx":460 - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] - * if bit_count == 32: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + /* "dataRead.pyx":669 + * # mask left part + * if bit_count < 56: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: */ - __pyx_t_6 = (__pyx_v_bit_count == 32); - if (__pyx_t_6) { + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":461 - * cdef unsigned char temp3[3] - * if bit_count == 32: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte + /* "dataRead.pyx":668 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + } - /* "dataRead.pyx":462 - * if bit_count == 32: - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * if swap == 0: + /* "dataRead.pyx":670 + * if bit_count < 56: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } - /* "dataRead.pyx":463 - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":661 + * buf[i] = temp8byte + * elif n_bytes == 7: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + goto __pyx_L16; } - /* "dataRead.pyx":464 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf + /* "dataRead.pyx":672 + * buf[i] = temp8byte * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":465 - * buf[i] = temp4byte - * if swap == 0: - * return buf # <<<<<<<<<<<<<< + /* "dataRead.pyx":673 * else: - * return buf.byteswap() + * for i in range(number_of_records): + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":464 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":675 + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - } + __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); - /* "dataRead.pyx":467 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * elif n_bytes == 4: - * if swap == 0: + /* "dataRead.pyx":677 + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":678 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 56: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":677 + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; } + + /* "dataRead.pyx":680 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_bit_count < 56); + if (__pyx_t_6) { + + /* "dataRead.pyx":681 + * # mask left part + * if bit_count < 56: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 6: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + + /* "dataRead.pyx":680 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":682 + * if bit_count < 56: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 6: + * if swap == 0: + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; } + __pyx_L16:; - /* "dataRead.pyx":460 - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] - * if bit_count == 32: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + /* "dataRead.pyx":660 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 7: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ + goto __pyx_L3; } - /* "dataRead.pyx":468 - * else: - * return buf.byteswap() - * elif n_bytes == 4: # <<<<<<<<<<<<<< + /* "dataRead.pyx":683 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 6: # <<<<<<<<<<<<<< * if swap == 0: * for i in range(number_of_records): */ - __pyx_t_6 = (__pyx_v_n_bytes == 4); + __pyx_t_6 = (__pyx_v_n_bytes == 6); if (__pyx_t_6) { - /* "dataRead.pyx":469 - * return buf.byteswap() - * elif n_bytes == 4: + /* "dataRead.pyx":684 + * buf[i] = temp8byte + * elif n_bytes == 6: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":470 - * elif n_bytes == 4: + /* "dataRead.pyx":685 + * elif n_bytes == 6: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift */ __pyx_t_7 = __pyx_v_number_of_records; @@ -26587,135 +30302,98 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":471 + /* "dataRead.pyx":686 * if swap == 0: * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":473 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":688 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset + * temp8byte = temp8byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":474 + /* "dataRead.pyx":689 * # right shift * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 32: + * if bit_count < 48: */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":473 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":688 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset + * temp8byte = temp8byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":476 - * temp4byte = temp4byte >> bit_offset + /* "dataRead.pyx":691 + * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_6 = (__pyx_v_bit_count < 32); + __pyx_t_6 = (__pyx_v_bit_count < 48); if (__pyx_t_6) { - /* "dataRead.pyx":477 - * # mask left part - * if bit_count < 32: - * temp4byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - - /* "dataRead.pyx":476 - * temp4byte = temp4byte >> bit_offset + /* "dataRead.pyx":692 * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - } - - /* "dataRead.pyx":478 - * if bit_count < 32: - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":479 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":480 - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp4byte + * if bit_count < 48: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte * else: */ - __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":479 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte + /* "dataRead.pyx":691 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ } - /* "dataRead.pyx":481 - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - * buf[i] = temp4byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":693 + * if bit_count < 48: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":469 - * return buf.byteswap() - * elif n_bytes == 4: + /* "dataRead.pyx":684 + * buf[i] = temp8byte + * elif n_bytes == 6: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L7; + goto __pyx_L25; } - /* "dataRead.pyx":483 - * buf[i] = temp4byte + /* "dataRead.pyx":695 + * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -26723,167 +30401,128 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":484 + /* "dataRead.pyx":696 * else: * for i in range(number_of_records): - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes - * # right shift + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes */ - (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":485 - * for i in range(number_of_records): - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< + /* "dataRead.pyx":698 + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); + __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); - /* "dataRead.pyx":487 - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + /* "dataRead.pyx":700 + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset + * temp8byte = temp8byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":488 + /* "dataRead.pyx":701 * # right shift * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 32: + * if bit_count < 48: */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":487 - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + /* "dataRead.pyx":700 + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset + * temp8byte = temp8byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":490 - * temp4byte = temp4byte >> bit_offset + /* "dataRead.pyx":703 + * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_6 = (__pyx_v_bit_count < 32); + __pyx_t_6 = (__pyx_v_bit_count < 48); if (__pyx_t_6) { - /* "dataRead.pyx":491 + /* "dataRead.pyx":704 * # mask left part - * if bit_count < 32: - * temp4byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend + * if bit_count < 48: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 5: */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":490 - * temp4byte = temp4byte >> bit_offset + /* "dataRead.pyx":703 + * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - } - - /* "dataRead.pyx":492 - * if bit_count < 32: - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":493 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":494 - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * return buf - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - - /* "dataRead.pyx":493 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ } - /* "dataRead.pyx":495 - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * return buf - * else: # on 3 bytes + /* "dataRead.pyx":705 + * if bit_count < 48: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 5: + * if swap == 0: */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } } - __pyx_L7:; + __pyx_L25:; - /* "dataRead.pyx":496 - * temp4byte |= sign_extend - * buf[i] = temp4byte - * return buf # <<<<<<<<<<<<<< - * else: # on 3 bytes + /* "dataRead.pyx":683 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 6: # <<<<<<<<<<<<<< * if swap == 0: + * for i in range(number_of_records): */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + goto __pyx_L3; + } - /* "dataRead.pyx":468 - * else: - * return buf.byteswap() - * elif n_bytes == 4: # <<<<<<<<<<<<<< + /* "dataRead.pyx":706 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 5: # <<<<<<<<<<<<<< * if swap == 0: * for i in range(number_of_records): */ - } + __pyx_t_6 = (__pyx_v_n_bytes == 5); + if (__pyx_t_6) { - /* "dataRead.pyx":498 - * return buf - * else: # on 3 bytes + /* "dataRead.pyx":707 + * buf[i] = temp8byte + * elif n_bytes == 5: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - /*else*/ { __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":499 - * else: # on 3 bytes + /* "dataRead.pyx":708 + * elif n_bytes == 5: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift */ __pyx_t_7 = __pyx_v_number_of_records; @@ -26891,135 +30530,98 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":500 + /* "dataRead.pyx":709 * if swap == 0: * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":502 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":711 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset + * temp8byte = temp8byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":503 + /* "dataRead.pyx":712 * # right shift * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 24: + * if bit_count < 32: */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":502 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":711 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset + * temp8byte = temp8byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":505 - * temp4byte = temp4byte >> bit_offset + /* "dataRead.pyx":714 + * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_6 = (__pyx_v_bit_count < 24); + __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":506 - * # mask left part - * if bit_count < 24: - * temp4byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - - /* "dataRead.pyx":505 - * temp4byte = temp4byte >> bit_offset + /* "dataRead.pyx":715 * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - } - - /* "dataRead.pyx":507 - * if bit_count < 24: - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":508 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":509 - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp4byte + * if bit_count < 32: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte * else: */ - __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":508 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte + /* "dataRead.pyx":714 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ } - /* "dataRead.pyx":510 - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - * buf[i] = temp4byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":716 + * if bit_count < 32: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":498 - * return buf - * else: # on 3 bytes + /* "dataRead.pyx":707 + * buf[i] = temp8byte + * elif n_bytes == 5: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L18; + goto __pyx_L34; } - /* "dataRead.pyx":512 - * buf[i] = temp4byte + /* "dataRead.pyx":718 + * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -27027,147 +30629,119 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":513 + /* "dataRead.pyx":719 * else: * for i in range(number_of_records): - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes - * # right shift + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes */ - (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":514 - * for i in range(number_of_records): - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< + /* "dataRead.pyx":721 + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); + __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); - /* "dataRead.pyx":516 - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + /* "dataRead.pyx":723 + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset + * temp8byte = temp8byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":517 + /* "dataRead.pyx":724 * # right shift * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 24: + * if bit_count < 32: */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":516 - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + /* "dataRead.pyx":723 + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset + * temp8byte = temp8byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":519 - * temp4byte = temp4byte >> bit_offset + /* "dataRead.pyx":726 + * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_6 = (__pyx_v_bit_count < 24); + __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":520 + /* "dataRead.pyx":727 * # mask left part - * if bit_count < 24: - * temp4byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend + * if bit_count < 32: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * return buf */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":519 - * temp4byte = temp4byte >> bit_offset + /* "dataRead.pyx":726 + * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - } - - /* "dataRead.pyx":521 - * if bit_count < 24: - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":522 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":523 - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * return buf - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - - /* "dataRead.pyx":522 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ } - /* "dataRead.pyx":524 - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * return buf + /* "dataRead.pyx":728 + * if bit_count < 32: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * return buf * */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } } - __pyx_L18:; + __pyx_L34:; - /* "dataRead.pyx":525 - * temp4byte |= sign_extend - * buf[i] = temp4byte - * return buf # <<<<<<<<<<<<<< - * - * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, + /* "dataRead.pyx":706 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 5: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; } + __pyx_L3:; - /* "dataRead.pyx":448 + /* "dataRead.pyx":729 + * temp8byte &= mask + * buf[i] = temp8byte + * return buf # <<<<<<<<<<<<<< * + * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":617 + * return buf * - * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ @@ -27184,7 +30758,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_signed_int", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.read_unsigned_longlong", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; @@ -27196,19 +30770,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p return __pyx_r; } -/* "dataRead.pyx":527 - * return buf +/* "dataRead.pyx":731 + * return buf * - * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; unsigned PY_LONG_LONG __pyx_v_mask; - unsigned PY_LONG_LONG __pyx_v_temp8byte; + PY_LONG_LONG __pyx_v_temp8byte; + unsigned long __pyx_v_sign_bit; + unsigned PY_LONG_LONG __pyx_v_sign_bit_mask; + unsigned PY_LONG_LONG __pyx_v_sign_extend; unsigned char __pyx_v_temp8[8]; unsigned char __pyx_v_temp7[7]; unsigned char __pyx_v_temp6[6]; @@ -27231,46 +30808,46 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_unsigned_longlong", 1); + __Pyx_RefNannySetupContext("read_signed_longlong", 1); __pyx_pybuffer_buf.pybuffer.buf = NULL; __pyx_pybuffer_buf.refcount = 0; __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":530 + /* "dataRead.pyx":734 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 530, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 530, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 530, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 530, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 734, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 530, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 734, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 530, __pyx_L1_error) + __PYX_ERR(0, 734, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -27278,25 +30855,52 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":532 - * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":736 + * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef unsigned long long temp8byte = 0 - * cdef unsigned char temp8[8] + * cdef long long temp8byte = 0 + * cdef unsigned long sign_bit = 0 */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":533 + /* "dataRead.pyx":737 * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) - * cdef unsigned long long temp8byte = 0 # <<<<<<<<<<<<<< + * cdef long long temp8byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned long sign_bit = 0 + * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) + */ + __pyx_v_temp8byte = 0; + + /* "dataRead.pyx":738 + * cdef unsigned long long mask = ((1 << bit_count) - 1) + * cdef long long temp8byte = 0 + * cdef unsigned long sign_bit = 0 # <<<<<<<<<<<<<< + * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count + */ + __pyx_v_sign_bit = 0; + + /* "dataRead.pyx":739 + * cdef long long temp8byte = 0 + * cdef unsigned long sign_bit = 0 + * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< + * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count + * cdef unsigned char temp8[8] + */ + __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); + + /* "dataRead.pyx":740 + * cdef unsigned long sign_bit = 0 + * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< * cdef unsigned char temp8[8] * cdef unsigned char temp7[7] */ - __pyx_v_temp8byte = 0; + __pyx_v_sign_extend = (((1 << (64 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":538 + /* "dataRead.pyx":745 * cdef unsigned char temp6[6] * cdef unsigned char temp5[5] * if bit_count == 64: # <<<<<<<<<<<<<< @@ -27306,7 +30910,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count == 64); if (__pyx_t_6) { - /* "dataRead.pyx":539 + /* "dataRead.pyx":746 * cdef unsigned char temp5[5] * if bit_count == 64: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -27318,7 +30922,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":540 + /* "dataRead.pyx":747 * if bit_count == 64: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -27327,7 +30931,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":541 + /* "dataRead.pyx":748 * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -27335,10 +30939,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con * return buf */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":542 + /* "dataRead.pyx":749 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte * if swap == 0: # <<<<<<<<<<<<<< @@ -27348,7 +30952,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":543 + /* "dataRead.pyx":750 * buf[i] = temp8byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -27360,7 +30964,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":542 + /* "dataRead.pyx":749 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte * if swap == 0: # <<<<<<<<<<<<<< @@ -27369,7 +30973,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":545 + /* "dataRead.pyx":752 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -27378,7 +30982,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 545, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -27398,7 +31002,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 545, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 752, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -27407,7 +31011,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L0; } - /* "dataRead.pyx":538 + /* "dataRead.pyx":745 * cdef unsigned char temp6[6] * cdef unsigned char temp5[5] * if bit_count == 64: # <<<<<<<<<<<<<< @@ -27416,7 +31020,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":546 + /* "dataRead.pyx":753 * else: * return buf.byteswap() * elif n_bytes == 8: # <<<<<<<<<<<<<< @@ -27426,7 +31030,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_n_bytes == 8); if (__pyx_t_6) { - /* "dataRead.pyx":547 + /* "dataRead.pyx":754 * return buf.byteswap() * elif n_bytes == 8: * if swap == 0: # <<<<<<<<<<<<<< @@ -27436,7 +31040,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":548 + /* "dataRead.pyx":755 * elif n_bytes == 8: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -27448,7 +31052,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":549 + /* "dataRead.pyx":756 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -27457,7 +31061,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":551 + /* "dataRead.pyx":758 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -27467,7 +31071,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":552 + /* "dataRead.pyx":759 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -27476,116 +31080,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":551 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - } - - /* "dataRead.pyx":554 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - __pyx_t_6 = (__pyx_v_bit_count < 64); - if (__pyx_t_6) { - - /* "dataRead.pyx":555 - * # mask left part - * if bit_count < 64: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - - /* "dataRead.pyx":554 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - } - - /* "dataRead.pyx":556 - * if bit_count < 64: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - - /* "dataRead.pyx":547 - * return buf.byteswap() - * elif n_bytes == 8: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): + /* "dataRead.pyx":758 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - goto __pyx_L7; - } - - /* "dataRead.pyx":558 - * buf[i] = temp8byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":559 - * else: - * for i in range(number_of_records): - * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - * temp8[2]<<40 | temp8[3]<<32 | \ - */ - (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":562 - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - * temp8[2]<<40 | temp8[3]<<32 | \ - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); - - /* "dataRead.pyx":564 - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":565 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 64: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":564 - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< * temp8byte = temp8byte >> bit_offset @@ -27593,181 +31089,98 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":567 + /* "dataRead.pyx":761 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ __pyx_t_6 = (__pyx_v_bit_count < 64); - if (__pyx_t_6) { - - /* "dataRead.pyx":568 - * # mask left part - * if bit_count < 64: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 7: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - - /* "dataRead.pyx":567 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - } - - /* "dataRead.pyx":569 - * if bit_count < 64: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 7: - * if swap == 0: - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - } - __pyx_L7:; - - /* "dataRead.pyx":546 - * else: - * return buf.byteswap() - * elif n_bytes == 8: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - goto __pyx_L3; - } - - /* "dataRead.pyx":570 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 7: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - __pyx_t_6 = (__pyx_v_n_bytes == 7); - if (__pyx_t_6) { - - /* "dataRead.pyx":571 - * buf[i] = temp8byte - * elif n_bytes == 7: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":572 - * elif n_bytes == 7: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":573 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":575 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":576 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + if (__pyx_t_6) { + + /* "dataRead.pyx":762 * # mask left part - * if bit_count < 56: + * if bit_count < 64: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":575 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< + /* "dataRead.pyx":761 * temp8byte = temp8byte >> bit_offset * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ } - /* "dataRead.pyx":578 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< + /* "dataRead.pyx":763 + * if bit_count < 64: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":764 * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend * buf[i] = temp8byte */ - __pyx_t_6 = (__pyx_v_bit_count < 56); + __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":579 - * # mask left part - * if bit_count < 56: - * temp8byte &= mask # <<<<<<<<<<<<<< + /* "dataRead.pyx":765 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< * buf[i] = temp8byte * else: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":578 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< + /* "dataRead.pyx":764 * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend * buf[i] = temp8byte */ } - /* "dataRead.pyx":580 - * if bit_count < 56: - * temp8byte &= mask + /* "dataRead.pyx":766 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":571 - * buf[i] = temp8byte - * elif n_bytes == 7: + /* "dataRead.pyx":754 + * return buf.byteswap() + * elif n_bytes == 8: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L16; + goto __pyx_L7; } - /* "dataRead.pyx":582 + /* "dataRead.pyx":768 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -27775,26 +31188,26 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":583 + /* "dataRead.pyx":769 * else: * for i in range(number_of_records): - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * temp8[2]<<40 | temp8[3]<<32 | \ */ - (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":585 - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< + /* "dataRead.pyx":772 + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * temp8[2]<<40 | temp8[3]<<32 | \ + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); + __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); - /* "dataRead.pyx":587 - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + /* "dataRead.pyx":774 + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< * temp8byte = temp8byte >> bit_offset @@ -27803,17 +31216,17 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":588 + /* "dataRead.pyx":775 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 56: + * if bit_count < 64: */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":587 - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + /* "dataRead.pyx":774 + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< * temp8byte = temp8byte >> bit_offset @@ -27821,70 +31234,107 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":590 + /* "dataRead.pyx":777 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< + * if bit_count < 64: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_6 = (__pyx_v_bit_count < 56); + __pyx_t_6 = (__pyx_v_bit_count < 64); if (__pyx_t_6) { - /* "dataRead.pyx":591 + /* "dataRead.pyx":778 * # mask left part - * if bit_count < 56: + * if bit_count < 64: * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 6: + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":590 + /* "dataRead.pyx":777 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< + * if bit_count < 64: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ } - /* "dataRead.pyx":592 - * if bit_count < 56: + /* "dataRead.pyx":779 + * if bit_count < 64: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":780 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":781 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 7: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":780 * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":782 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 6: + * elif n_bytes == 7: * if swap == 0: */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } } - __pyx_L16:; + __pyx_L7:; - /* "dataRead.pyx":570 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 7: # <<<<<<<<<<<<<< + /* "dataRead.pyx":753 + * else: + * return buf.byteswap() + * elif n_bytes == 8: # <<<<<<<<<<<<<< * if swap == 0: * for i in range(number_of_records): */ goto __pyx_L3; } - /* "dataRead.pyx":593 - * temp8byte &= mask + /* "dataRead.pyx":783 + * temp8byte |= sign_extend * buf[i] = temp8byte - * elif n_bytes == 6: # <<<<<<<<<<<<<< + * elif n_bytes == 7: # <<<<<<<<<<<<<< * if swap == 0: * for i in range(number_of_records): */ - __pyx_t_6 = (__pyx_v_n_bytes == 6); + __pyx_t_6 = (__pyx_v_n_bytes == 7); if (__pyx_t_6) { - /* "dataRead.pyx":594 + /* "dataRead.pyx":784 * buf[i] = temp8byte - * elif n_bytes == 6: + * elif n_bytes == 7: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) @@ -27892,8 +31342,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":595 - * elif n_bytes == 6: + /* "dataRead.pyx":785 + * elif n_bytes == 7: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) @@ -27904,7 +31354,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":596 + /* "dataRead.pyx":786 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -27913,7 +31363,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":598 + /* "dataRead.pyx":788 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -27923,16 +31373,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":599 + /* "dataRead.pyx":789 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 48: + * if bit_count < 56: */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":598 + /* "dataRead.pyx":788 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -27941,61 +31391,98 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":601 + /* "dataRead.pyx":791 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< + * if bit_count < 56: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_6 = (__pyx_v_bit_count < 48); + __pyx_t_6 = (__pyx_v_bit_count < 56); if (__pyx_t_6) { - /* "dataRead.pyx":602 + /* "dataRead.pyx":792 * # mask left part - * if bit_count < 48: + * if bit_count < 56: * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":601 + /* "dataRead.pyx":791 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< + * if bit_count < 56: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ } - /* "dataRead.pyx":603 - * if bit_count < 48: + /* "dataRead.pyx":793 + * if bit_count < 56: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":794 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":795 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":794 * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":796 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":594 + /* "dataRead.pyx":784 * buf[i] = temp8byte - * elif n_bytes == 6: + * elif n_bytes == 7: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L25; + goto __pyx_L18; } - /* "dataRead.pyx":605 + /* "dataRead.pyx":798 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -28003,26 +31490,26 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":606 + /* "dataRead.pyx":799 * else: * for i in range(number_of_records): - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes */ - (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":608 - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< + /* "dataRead.pyx":801 + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); + __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); - /* "dataRead.pyx":610 - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + /* "dataRead.pyx":803 + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< * temp8byte = temp8byte >> bit_offset @@ -28031,17 +31518,17 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":611 + /* "dataRead.pyx":804 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 48: + * if bit_count < 56: */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":610 - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + /* "dataRead.pyx":803 + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< * temp8byte = temp8byte >> bit_offset @@ -28049,70 +31536,107 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":613 + /* "dataRead.pyx":806 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< + * if bit_count < 56: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_6 = (__pyx_v_bit_count < 48); + __pyx_t_6 = (__pyx_v_bit_count < 56); if (__pyx_t_6) { - /* "dataRead.pyx":614 + /* "dataRead.pyx":807 * # mask left part - * if bit_count < 48: + * if bit_count < 56: * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 5: + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":613 + /* "dataRead.pyx":806 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< + * if bit_count < 56: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ } - /* "dataRead.pyx":615 - * if bit_count < 48: + /* "dataRead.pyx":808 + * if bit_count < 56: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":809 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":810 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 6: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":809 * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":811 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 5: + * elif n_bytes == 6: * if swap == 0: */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } } - __pyx_L25:; + __pyx_L18:; - /* "dataRead.pyx":593 - * temp8byte &= mask + /* "dataRead.pyx":783 + * temp8byte |= sign_extend * buf[i] = temp8byte - * elif n_bytes == 6: # <<<<<<<<<<<<<< + * elif n_bytes == 7: # <<<<<<<<<<<<<< * if swap == 0: * for i in range(number_of_records): */ goto __pyx_L3; } - /* "dataRead.pyx":616 - * temp8byte &= mask + /* "dataRead.pyx":812 + * temp8byte |= sign_extend * buf[i] = temp8byte - * elif n_bytes == 5: # <<<<<<<<<<<<<< + * elif n_bytes == 6: # <<<<<<<<<<<<<< * if swap == 0: * for i in range(number_of_records): */ - __pyx_t_6 = (__pyx_v_n_bytes == 5); + __pyx_t_6 = (__pyx_v_n_bytes == 6); if (__pyx_t_6) { - /* "dataRead.pyx":617 + /* "dataRead.pyx":813 * buf[i] = temp8byte - * elif n_bytes == 5: + * elif n_bytes == 6: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) @@ -28120,8 +31644,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":618 - * elif n_bytes == 5: + /* "dataRead.pyx":814 + * elif n_bytes == 6: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) @@ -28132,7 +31656,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":619 + /* "dataRead.pyx":815 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -28141,7 +31665,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":621 + /* "dataRead.pyx":817 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -28151,16 +31675,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":622 + /* "dataRead.pyx":818 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 32: + * if bit_count < 48: */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":621 + /* "dataRead.pyx":817 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -28169,472 +31693,252 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":624 + /* "dataRead.pyx":820 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< + * if bit_count < 48: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_6 = (__pyx_v_bit_count < 32); + __pyx_t_6 = (__pyx_v_bit_count < 48); if (__pyx_t_6) { - /* "dataRead.pyx":625 + /* "dataRead.pyx":821 * # mask left part - * if bit_count < 32: + * if bit_count < 48: * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":624 + /* "dataRead.pyx":820 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< + * if bit_count < 48: # <<<<<<<<<<<<<< * temp8byte &= mask - * buf[i] = temp8byte + * sign_bit = temp8byte & sign_bit_mask */ } - /* "dataRead.pyx":626 - * if bit_count < 32: + /* "dataRead.pyx":822 + * if bit_count < 48: * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - - /* "dataRead.pyx":617 - * buf[i] = temp8byte - * elif n_bytes == 5: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - goto __pyx_L34; - } - - /* "dataRead.pyx":628 - * buf[i] = temp8byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":629 - * else: - * for i in range(number_of_records): - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes - */ - (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":631 - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); - - /* "dataRead.pyx":633 - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":634 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 32: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":633 - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend */ - } + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":636 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< + /* "dataRead.pyx":823 * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend * buf[i] = temp8byte */ - __pyx_t_6 = (__pyx_v_bit_count < 32); + __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":637 - * # mask left part - * if bit_count < 32: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * return buf - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - - /* "dataRead.pyx":636 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - } - - /* "dataRead.pyx":638 - * if bit_count < 32: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * return buf - * - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - } - __pyx_L34:; - - /* "dataRead.pyx":616 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 5: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - } - __pyx_L3:; - - /* "dataRead.pyx":639 - * temp8byte &= mask - * buf[i] = temp8byte - * return buf # <<<<<<<<<<<<<< - * - * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; - - /* "dataRead.pyx":527 - * return buf - * - * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - */ - - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_unsigned_longlong", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":824 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); -/* "dataRead.pyx":641 - * return buf - * - * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + /* "dataRead.pyx":823 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ + } -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned PY_LONG_LONG __pyx_v_mask; - PY_LONG_LONG __pyx_v_temp8byte; - unsigned long __pyx_v_sign_bit; - unsigned PY_LONG_LONG __pyx_v_sign_bit_mask; - unsigned PY_LONG_LONG __pyx_v_sign_extend; - unsigned char __pyx_v_temp8[8]; - unsigned char __pyx_v_temp7[7]; - unsigned char __pyx_v_temp6[6]; - unsigned char __pyx_v_temp5[5]; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - int __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - unsigned int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_signed_longlong", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + /* "dataRead.pyx":825 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } - /* "dataRead.pyx":644 - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) + /* "dataRead.pyx":813 + * buf[i] = temp8byte + * elif n_bytes == 6: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 644, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 644, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 644, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 644, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 644, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 644, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + goto __pyx_L29; } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; - /* "dataRead.pyx":646 - * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef long long temp8byte = 0 - * cdef unsigned long sign_bit = 0 + /* "dataRead.pyx":827 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":647 - * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) - * cdef long long temp8byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned long sign_bit = 0 - * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) + /* "dataRead.pyx":828 + * else: + * for i in range(number_of_records): + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes */ - __pyx_v_temp8byte = 0; + (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":648 - * cdef unsigned long long mask = ((1 << bit_count) - 1) - * cdef long long temp8byte = 0 - * cdef unsigned long sign_bit = 0 # <<<<<<<<<<<<<< - * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count + /* "dataRead.pyx":830 + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_v_sign_bit = 0; + __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); - /* "dataRead.pyx":649 - * cdef long long temp8byte = 0 - * cdef unsigned long sign_bit = 0 - * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< - * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count - * cdef unsigned char temp8[8] + /* "dataRead.pyx":832 + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":650 - * cdef unsigned long sign_bit = 0 - * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< - * cdef unsigned char temp8[8] - * cdef unsigned char temp7[7] + /* "dataRead.pyx":833 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 48: */ - __pyx_v_sign_extend = (((1 << (64 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":655 - * cdef unsigned char temp6[6] - * cdef unsigned char temp5[5] - * if bit_count == 64: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":832 + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_6 = (__pyx_v_bit_count == 64); - if (__pyx_t_6) { + } - /* "dataRead.pyx":656 - * cdef unsigned char temp5[5] - * if bit_count == 64: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte + /* "dataRead.pyx":835 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_6 = (__pyx_v_bit_count < 48); + if (__pyx_t_6) { - /* "dataRead.pyx":657 - * if bit_count == 64: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * if swap == 0: + /* "dataRead.pyx":836 + * # mask left part + * if bit_count < 48: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":658 - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":835 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } + } - /* "dataRead.pyx":659 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":837 + * if bit_count < 48: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":660 - * buf[i] = temp8byte - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":838 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":659 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":839 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 5: */ - } + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":662 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * elif n_bytes == 8: - * if swap == 0: + /* "dataRead.pyx":838 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; } + + /* "dataRead.pyx":840 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 5: + * if swap == 0: + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 662, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; } + __pyx_L29:; - /* "dataRead.pyx":655 - * cdef unsigned char temp6[6] - * cdef unsigned char temp5[5] - * if bit_count == 64: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":812 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 6: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ + goto __pyx_L3; } - /* "dataRead.pyx":663 - * else: - * return buf.byteswap() - * elif n_bytes == 8: # <<<<<<<<<<<<<< + /* "dataRead.pyx":841 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 5: # <<<<<<<<<<<<<< * if swap == 0: * for i in range(number_of_records): */ - __pyx_t_6 = (__pyx_v_n_bytes == 8); + __pyx_t_6 = (__pyx_v_n_bytes == 5); if (__pyx_t_6) { - /* "dataRead.pyx":664 - * return buf.byteswap() - * elif n_bytes == 8: + /* "dataRead.pyx":842 + * buf[i] = temp8byte + * elif n_bytes == 5: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) @@ -28642,8 +31946,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":665 - * elif n_bytes == 8: + /* "dataRead.pyx":843 + * elif n_bytes == 5: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) @@ -28654,7 +31958,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":666 + /* "dataRead.pyx":844 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -28663,7 +31967,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":668 + /* "dataRead.pyx":846 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -28673,16 +31977,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":669 + /* "dataRead.pyx":847 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 64: + * if bit_count < 40: */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":668 + /* "dataRead.pyx":846 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -28691,36 +31995,36 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":671 + /* "dataRead.pyx":849 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< + * if bit_count < 40: # <<<<<<<<<<<<<< * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_6 = (__pyx_v_bit_count < 64); + __pyx_t_6 = (__pyx_v_bit_count < 40); if (__pyx_t_6) { - /* "dataRead.pyx":672 + /* "dataRead.pyx":850 * # mask left part - * if bit_count < 64: + * if bit_count < 40: * temp8byte &= mask # <<<<<<<<<<<<<< * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":671 + /* "dataRead.pyx":849 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< + * if bit_count < 40: # <<<<<<<<<<<<<< * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask */ } - /* "dataRead.pyx":673 - * if bit_count < 64: + /* "dataRead.pyx":851 + * if bit_count < 40: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< * if sign_bit: # negative value, sign extend @@ -28728,7 +32032,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":674 + /* "dataRead.pyx":852 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -28738,7 +32042,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":675 + /* "dataRead.pyx":853 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -28747,7 +32051,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":674 + /* "dataRead.pyx":852 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -28756,7 +32060,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":676 + /* "dataRead.pyx":854 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -28767,22 +32071,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":664 - * return buf.byteswap() - * elif n_bytes == 8: + /* "dataRead.pyx":842 + * buf[i] = temp8byte + * elif n_bytes == 5: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L7; + goto __pyx_L40; } - /* "dataRead.pyx":678 + /* "dataRead.pyx":856 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -28790,26 +32094,26 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":679 + /* "dataRead.pyx":857 * else: * for i in range(number_of_records): - * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - * temp8[2]<<40 | temp8[3]<<32 | \ + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes */ - (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":682 - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - * temp8[2]<<40 | temp8[3]<<32 | \ - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< + /* "dataRead.pyx":859 + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); + __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); - /* "dataRead.pyx":684 - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + /* "dataRead.pyx":861 + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< * temp8byte = temp8byte >> bit_offset @@ -28818,17 +32122,17 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":685 + /* "dataRead.pyx":862 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 64: + * if bit_count < 40: */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":684 - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + /* "dataRead.pyx":861 + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< * temp8byte = temp8byte >> bit_offset @@ -28836,36 +32140,36 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":687 + /* "dataRead.pyx":864 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< + * if bit_count < 40: # <<<<<<<<<<<<<< * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_6 = (__pyx_v_bit_count < 64); + __pyx_t_6 = (__pyx_v_bit_count < 40); if (__pyx_t_6) { - /* "dataRead.pyx":688 + /* "dataRead.pyx":865 * # mask left part - * if bit_count < 64: + * if bit_count < 40: * temp8byte &= mask # <<<<<<<<<<<<<< * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":687 + /* "dataRead.pyx":864 * temp8byte = temp8byte >> bit_offset * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< + * if bit_count < 40: # <<<<<<<<<<<<<< * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask */ } - /* "dataRead.pyx":689 - * if bit_count < 64: + /* "dataRead.pyx":866 + * if bit_count < 40: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< * if sign_bit: # negative value, sign extend @@ -28873,7 +32177,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":690 + /* "dataRead.pyx":867 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -28883,16 +32187,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":691 + /* "dataRead.pyx":868 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< * buf[i] = temp8byte - * elif n_bytes == 7: + * return buf */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":690 + /* "dataRead.pyx":867 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -28901,1384 +32205,2660 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":692 + /* "dataRead.pyx":869 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 7: - * if swap == 0: + * return buf + * */ __pyx_t_10 = __pyx_v_i; *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } } - __pyx_L7:; + __pyx_L40:; - /* "dataRead.pyx":663 - * else: - * return buf.byteswap() - * elif n_bytes == 8: # <<<<<<<<<<<<<< + /* "dataRead.pyx":841 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 5: # <<<<<<<<<<<<<< * if swap == 0: * for i in range(number_of_records): */ - goto __pyx_L3; + } + __pyx_L3:; + + /* "dataRead.pyx":870 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":731 + * return buf + * + * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + */ + + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_signed_longlong", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":872 + * return buf + * + * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset): + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, CYTHON_UNUSED unsigned long __pyx_v_bit_count, CYTHON_UNUSED unsigned char __pyx_v_bit_offset) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned long __pyx_v_pos_byte_end; + 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; + unsigned PY_LONG_LONG __pyx_t_5; + unsigned PY_LONG_LONG __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_byte", 1); + + /* "dataRead.pyx":875 + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset): + * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 875, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 875, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 875, __pyx_L1_error) + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "dataRead.pyx":877 + * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ + */ + __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); + + /* "dataRead.pyx":878 + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i]) + */ + __pyx_t_5 = __pyx_v_number_of_records; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "dataRead.pyx":879 + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): + * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< + * pos_byte_end + record_byte_size * i]) + * return buf + */ + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 879, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 879, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_1, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 879, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - /* "dataRead.pyx":693 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 7: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":881 + * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i]) + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - __pyx_t_6 = (__pyx_v_n_bytes == 7); - if (__pyx_t_6) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":694 - * buf[i] = temp8byte - * elif n_bytes == 7: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":872 + * return buf + * + * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset): */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - /* "dataRead.pyx":695 - * elif n_bytes == 7: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + /* 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_AddTraceback("dataRead.read_byte", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":696 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: +/* "dataRead.pyx":883 + * return buf + * + * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":698 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, CYTHON_UNUSED unsigned long __pyx_v_bit_count, CYTHON_UNUSED unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned long __pyx_v_pos_byte_end; + 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; + unsigned PY_LONG_LONG __pyx_t_5; + unsigned PY_LONG_LONG __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + int __pyx_t_8; + unsigned int __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_array", 1); + + /* "dataRead.pyx":886 + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 886, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 886, __pyx_L1_error) + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":699 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 56: + /* "dataRead.pyx":888 + * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); - /* "dataRead.pyx":698 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":889 + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) */ - } + __pyx_t_5 = __pyx_v_number_of_records; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; - /* "dataRead.pyx":701 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":890 + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: */ - __pyx_t_6 = (__pyx_v_bit_count < 56); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 890, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 890, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":702 - * # mask left part - * if bit_count < 56: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":891 + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 890, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); - /* "dataRead.pyx":701 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":890 + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: */ - } + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 890, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(0, 890, __pyx_L1_error); + __pyx_t_4 = 0; - /* "dataRead.pyx":703 - * if bit_count < 56: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + /* "dataRead.pyx":891 + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 891, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 891, __pyx_L1_error) - /* "dataRead.pyx":704 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":890 + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 890, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_2, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 890, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } - /* "dataRead.pyx":705 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + /* "dataRead.pyx":892 + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_t_8 = (__pyx_v_swap == 0); + if (__pyx_t_8) { - /* "dataRead.pyx":704 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":893 + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() */ - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":706 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":892 + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } + } - /* "dataRead.pyx":694 - * buf[i] = temp8byte - * elif n_bytes == 7: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":895 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * + * def unsorted_data_read4(record, info, bytes tmp, */ - goto __pyx_L18; + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 895, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 895, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":708 - * buf[i] = temp8byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + /* "dataRead.pyx":883 + * return buf + * + * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":709 - * else: - * for i in range(number_of_records): - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes - */ - (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + /* 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_AddTraceback("dataRead.read_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":711 - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: +/* "dataRead.pyx":897 + * return buf.byteswap() + * + * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< + * const unsigned short record_id_size, + * const unsigned long long data_block_length): */ - __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); - /* "dataRead.pyx":713 - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_3unsorted_data_read4(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8dataRead_2unsorted_data_read4, " reads only the channels using offset functions, channel by channel within unsorted data\n\n Parameters\n ------------\n record : class\n record class\n info: class\n info class\n tmp : bytes\n byte stream\n record_id_size : unsigned short\n record id length\n data_block_length : unsigned long long\n length of data block minus header\n\n Returns\n --------\n buf : array\n data array\n\n "); +static PyMethodDef __pyx_mdef_8dataRead_3unsorted_data_read4 = {"unsorted_data_read4", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_3unsorted_data_read4, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_2unsorted_data_read4}; +static PyObject *__pyx_pw_8dataRead_3unsorted_data_read4(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_record = 0; + PyObject *__pyx_v_info = 0; + PyObject *__pyx_v_tmp = 0; + unsigned short __pyx_v_record_id_size; + unsigned PY_LONG_LONG __pyx_v_data_block_length; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("unsorted_data_read4 (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_record,&__pyx_n_s_info,&__pyx_n_s_tmp,&__pyx_n_s_record_id_size,&__pyx_n_s_data_block_length,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_info)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 1); __PYX_ERR(0, 897, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tmp)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 2); __PYX_ERR(0, 897, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_id_size)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 3); __PYX_ERR(0, 897, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data_block_length)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 4); __PYX_ERR(0, 897, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "unsorted_data_read4") < 0)) __PYX_ERR(0, 897, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 5)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + } + __pyx_v_record = values[0]; + __pyx_v_info = values[1]; + __pyx_v_tmp = ((PyObject*)values[2]); + __pyx_v_record_id_size = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_record_id_size == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 898, __pyx_L3_error) + __pyx_v_data_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_data_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 899, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 897, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.unsorted_data_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 897, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_2unsorted_data_read4(__pyx_self, __pyx_v_record, __pyx_v_info, __pyx_v_tmp, __pyx_v_record_id_size, __pyx_v_data_block_length); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":714 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 56: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); +static PyObject *__pyx_pf_8dataRead_2unsorted_data_read4(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_record, PyObject *__pyx_v_info, PyObject *__pyx_v_tmp, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_data_block_length) { + char const *__pyx_v_bit_stream; + unsigned PY_LONG_LONG __pyx_v_position; + unsigned char __pyx_v_record_id_char; + unsigned short __pyx_v_record_id_short; + unsigned long __pyx_v_record_id_long; + unsigned PY_LONG_LONG __pyx_v_record_id_long_long; + PyObject *__pyx_v_buf = 0; + PyObject *__pyx_v_VLSD = 0; + PyObject *__pyx_v_pos_byte_beg = 0; + PyObject *__pyx_v_pos_byte_end = 0; + PyObject *__pyx_v_c_format_structure = 0; + CYTHON_UNUSED PyObject *__pyx_v_byte_length = 0; + PyObject *__pyx_v_numpy_format = 0; + PyObject *__pyx_v_index = 0; + PyObject *__pyx_v_CGrecordLength = 0; + PyObject *__pyx_v_VLSD_flag = 0; + PyObject *__pyx_v_VLSD_CG_name = 0; + PyObject *__pyx_v_VLSD_CG_signal_data_type = 0; + PyObject *__pyx_v_channel_name_set = 0; + PyObject *__pyx_v_record_id = NULL; + PyObject *__pyx_v_Channel = NULL; + PyObject *__pyx_v_name = NULL; + PyObject *__pyx_v_channel_name = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + Py_ssize_t __pyx_t_10; + Py_ssize_t __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *(*__pyx_t_19)(PyObject *); + unsigned PY_LONG_LONG __pyx_t_20; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("unsorted_data_read4", 1); - /* "dataRead.pyx":713 - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":921 + * + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< + * cdef unsigned long long position = 0 + * cdef unsigned char record_id_char = 0 */ - } + __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 921, __pyx_L1_error) + __pyx_v_bit_stream = __pyx_t_1; - /* "dataRead.pyx":716 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":922 + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * cdef unsigned long long position = 0 # <<<<<<<<<<<<<< + * cdef unsigned char record_id_char = 0 + * cdef unsigned short record_id_short = 0 */ - __pyx_t_6 = (__pyx_v_bit_count < 56); - if (__pyx_t_6) { + __pyx_v_position = 0; - /* "dataRead.pyx":717 - * # mask left part - * if bit_count < 56: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":923 + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * cdef unsigned long long position = 0 + * cdef unsigned char record_id_char = 0 # <<<<<<<<<<<<<< + * cdef unsigned short record_id_short = 0 + * cdef unsigned long record_id_long = 0 */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_record_id_char = 0; - /* "dataRead.pyx":716 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":924 + * cdef unsigned long long position = 0 + * cdef unsigned char record_id_char = 0 + * cdef unsigned short record_id_short = 0 # <<<<<<<<<<<<<< + * cdef unsigned long record_id_long = 0 + * cdef unsigned long long record_id_long_long = 0 */ - } + __pyx_v_record_id_short = 0; - /* "dataRead.pyx":718 - * if bit_count < 56: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + /* "dataRead.pyx":925 + * cdef unsigned char record_id_char = 0 + * cdef unsigned short record_id_short = 0 + * cdef unsigned long record_id_long = 0 # <<<<<<<<<<<<<< + * cdef unsigned long long record_id_long_long = 0 + * # initialise data structure */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + __pyx_v_record_id_long = 0; - /* "dataRead.pyx":719 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":926 + * cdef unsigned short record_id_short = 0 + * cdef unsigned long record_id_long = 0 + * cdef unsigned long long record_id_long_long = 0 # <<<<<<<<<<<<<< + * # initialise data structure + * # key is channel name */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + __pyx_v_record_id_long_long = 0; - /* "dataRead.pyx":720 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 6: + /* "dataRead.pyx":929 + * # initialise data structure + * # key is channel name + * cdef dict buf = {} # <<<<<<<<<<<<<< + * cdef dict VLSD = {} + * cdef dict pos_byte_beg = {} */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 929, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_buf = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":719 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":930 + * # key is channel name + * cdef dict buf = {} + * cdef dict VLSD = {} # <<<<<<<<<<<<<< + * cdef dict pos_byte_beg = {} + * cdef dict pos_byte_end = {} */ - } + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 930, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_VLSD = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":721 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 6: - * if swap == 0: + /* "dataRead.pyx":931 + * cdef dict buf = {} + * cdef dict VLSD = {} + * cdef dict pos_byte_beg = {} # <<<<<<<<<<<<<< + * cdef dict pos_byte_end = {} + * cdef dict c_format_structure = {} */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - } - __pyx_L18:; + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 931, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_pos_byte_beg = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":693 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 7: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":932 + * cdef dict VLSD = {} + * cdef dict pos_byte_beg = {} + * cdef dict pos_byte_end = {} # <<<<<<<<<<<<<< + * cdef dict c_format_structure = {} + * cdef dict byte_length = {} */ - goto __pyx_L3; - } + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 932, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_pos_byte_end = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":722 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 6: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":933 + * cdef dict pos_byte_beg = {} + * cdef dict pos_byte_end = {} + * cdef dict c_format_structure = {} # <<<<<<<<<<<<<< + * cdef dict byte_length = {} + * cdef dict numpy_format = {} */ - __pyx_t_6 = (__pyx_v_n_bytes == 6); - if (__pyx_t_6) { + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 933, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_c_format_structure = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":723 - * buf[i] = temp8byte - * elif n_bytes == 6: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":934 + * cdef dict pos_byte_end = {} + * cdef dict c_format_structure = {} + * cdef dict byte_length = {} # <<<<<<<<<<<<<< + * cdef dict numpy_format = {} + * # key is record id */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 934, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_byte_length = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":724 - * elif n_bytes == 6: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift + /* "dataRead.pyx":935 + * cdef dict c_format_structure = {} + * cdef dict byte_length = {} + * cdef dict numpy_format = {} # <<<<<<<<<<<<<< + * # key is record id + * cdef dict index = {} */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 935, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_numpy_format = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":725 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":937 + * cdef dict numpy_format = {} + * # key is record id + * cdef dict index = {} # <<<<<<<<<<<<<< + * cdef dict CGrecordLength = {} + * cdef dict VLSD_flag = {} */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 937, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_index = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":727 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":938 + * # key is record id + * cdef dict index = {} + * cdef dict CGrecordLength = {} # <<<<<<<<<<<<<< + * cdef dict VLSD_flag = {} + * cdef dict VLSD_CG_name = {} */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 938, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_CGrecordLength = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":728 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 48: + /* "dataRead.pyx":939 + * cdef dict index = {} + * cdef dict CGrecordLength = {} + * cdef dict VLSD_flag = {} # <<<<<<<<<<<<<< + * cdef dict VLSD_CG_name = {} + * cdef dict VLSD_CG_signal_data_type = {} */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 939, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_VLSD_flag = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":727 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":940 + * cdef dict CGrecordLength = {} + * cdef dict VLSD_flag = {} + * cdef dict VLSD_CG_name = {} # <<<<<<<<<<<<<< + * cdef dict VLSD_CG_signal_data_type = {} + * cdef dict channel_name_set = {} */ - } + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 940, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_VLSD_CG_name = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":730 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":941 + * cdef dict VLSD_flag = {} + * cdef dict VLSD_CG_name = {} + * cdef dict VLSD_CG_signal_data_type = {} # <<<<<<<<<<<<<< + * cdef dict channel_name_set = {} + * for record_id in record: */ - __pyx_t_6 = (__pyx_v_bit_count < 48); - if (__pyx_t_6) { + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 941, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_VLSD_CG_signal_data_type = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":731 - * # mask left part - * if bit_count < 48: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":942 + * cdef dict VLSD_CG_name = {} + * cdef dict VLSD_CG_signal_data_type = {} + * cdef dict channel_name_set = {} # <<<<<<<<<<<<<< + * for record_id in record: + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 942, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_channel_name_set = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":730 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":943 + * cdef dict VLSD_CG_signal_data_type = {} + * cdef dict channel_name_set = {} + * for record_id in record: # <<<<<<<<<<<<<< + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + * VLSD_flag[record_id] = True */ + if (likely(PyList_CheckExact(__pyx_v_record)) || PyTuple_CheckExact(__pyx_v_record)) { + __pyx_t_2 = __pyx_v_record; __Pyx_INCREF(__pyx_t_2); + __pyx_t_3 = 0; + __pyx_t_4 = NULL; + } else { + __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_record); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 943, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 943, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 943, __pyx_L1_error) + #endif + if (__pyx_t_3 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 943, __pyx_L1_error) + #else + __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 943, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 943, __pyx_L1_error) + #endif + if (__pyx_t_3 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 943, __pyx_L1_error) + #else + __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 943, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } + } else { + __pyx_t_5 = __pyx_t_4(__pyx_t_2); + if (unlikely(!__pyx_t_5)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 943, __pyx_L1_error) } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_record_id, __pyx_t_5); + __pyx_t_5 = 0; - /* "dataRead.pyx":732 - * if bit_count < 48: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + /* "dataRead.pyx":944 + * cdef dict channel_name_set = {} + * for record_id in record: + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< + * VLSD_flag[record_id] = True + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_Flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyInt_AndObjC(__pyx_t_5, __pyx_int_33, 33, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 944, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_7) { - /* "dataRead.pyx":733 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":945 + * for record_id in record: + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + * VLSD_flag[record_id] = True # <<<<<<<<<<<<<< + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_True) < 0))) __PYX_ERR(0, 945, __pyx_L1_error) - /* "dataRead.pyx":734 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + /* "dataRead.pyx":946 + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + * VLSD_flag[record_id] = True + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] # <<<<<<<<<<<<<< + * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] + * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channelName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_t_5, __pyx_t_6) < 0))) __PYX_ERR(0, 946, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":733 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":947 + * VLSD_flag[record_id] = True + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] # <<<<<<<<<<<<<< + * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) + * else: */ - } + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_channelName); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 947, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":735 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":948 + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] + * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) # <<<<<<<<<<<<<< * else: - * for i in range(number_of_records): + * VLSD_flag[record_id] = False */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channel); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_signal_data_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_9 = 1; + } } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_info}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 948, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":723 - * buf[i] = temp8byte - * elif n_bytes == 6: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":944 + * cdef dict channel_name_set = {} + * for record_id in record: + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< + * VLSD_flag[record_id] = True + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] */ - goto __pyx_L29; + goto __pyx_L5; } - /* "dataRead.pyx":737 - * buf[i] = temp8byte + /* "dataRead.pyx":950 + * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * VLSD_flag[record_id] = False # <<<<<<<<<<<<<< + * for Channel in record[record_id]['record'].values(): + * #if not Channel.VLSD_CG_Flag: */ /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_False) < 0))) __PYX_ERR(0, 950, __pyx_L1_error) - /* "dataRead.pyx":738 + /* "dataRead.pyx":951 * else: - * for i in range(number_of_records): - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * VLSD_flag[record_id] = False + * for Channel in record[record_id]['record'].values(): # <<<<<<<<<<<<<< + * #if not Channel.VLSD_CG_Flag: + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), */ - (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __pyx_t_10 = 0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 951, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 951, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(__pyx_t_5 == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 951, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 951, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); + __pyx_t_6 = __pyx_t_8; + __pyx_t_8 = 0; + while (1) { + __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_10, NULL, &__pyx_t_8, NULL, __pyx_t_12); + if (unlikely(__pyx_t_13 == 0)) break; + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 951, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF_SET(__pyx_v_Channel, __pyx_t_8); + __pyx_t_8 = 0; - /* "dataRead.pyx":740 - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":953 + * for Channel in record[record_id]['record'].values(): + * #if not Channel.VLSD_CG_Flag: + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') + * numpy_format[Channel.name] = Channel.data_format(info) */ - __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_numberOfRecords); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_8); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error); + __pyx_t_8 = 0; + __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_14); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14)) __PYX_ERR(0, 953, __pyx_L1_error); + __pyx_t_14 = 0; - /* "dataRead.pyx":742 - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":954 + * #if not Channel.VLSD_CG_Flag: + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') # <<<<<<<<<<<<<< + * numpy_format[Channel.name] = Channel.data_format(info) + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 954, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 954, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 954, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_18 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_17}; + __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 954, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 954, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 954, __pyx_L1_error) - /* "dataRead.pyx":743 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 48: + /* "dataRead.pyx":953 + * for Channel in record[record_id]['record'].values(): + * #if not Channel.VLSD_CG_Flag: + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') + * numpy_format[Channel.name] = Channel.data_format(info) */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 953, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - /* "dataRead.pyx":742 - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":955 + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') + * numpy_format[Channel.name] = Channel.data_format(info) # <<<<<<<<<<<<<< + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_data_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 955, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_info}; + __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 955, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 955, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + if (unlikely((PyDict_SetItem(__pyx_v_numpy_format, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 955, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - /* "dataRead.pyx":745 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":956 + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') + * numpy_format[Channel.name] = Channel.data_format(info) + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset # <<<<<<<<<<<<<< + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + * index[record_id] = 0 */ - __pyx_t_6 = (__pyx_v_bit_count < 48); - if (__pyx_t_6) { + __pyx_t_15 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 956, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_byteOffset); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 956, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 956, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 956, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_beg, __pyx_t_14, __pyx_t_8) < 0))) __PYX_ERR(0, 956, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "dataRead.pyx":746 - * # mask left part - * if bit_count < 48: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":957 + * numpy_format[Channel.name] = Channel.data_format(info) + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned # <<<<<<<<<<<<<< + * index[record_id] = 0 + * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_pos_byte_beg, __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_15 = PyNumber_Add(__pyx_t_14, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_end, __pyx_t_8, __pyx_t_15) < 0))) __PYX_ERR(0, 957, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":745 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":958 + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + * index[record_id] = 0 # <<<<<<<<<<<<<< + * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength + * channel_name_set[record_id] = record[record_id]['record'].channelNames */ - } + if (unlikely((PyDict_SetItem(__pyx_v_index, __pyx_v_record_id, __pyx_int_0) < 0))) __PYX_ERR(0, 958, __pyx_L1_error) - /* "dataRead.pyx":747 - * if bit_count < 48: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + /* "dataRead.pyx":959 + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + * index[record_id] = 0 + * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength # <<<<<<<<<<<<<< + * channel_name_set[record_id] = record[record_id]['record'].channelNames + * # read data */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 959, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 959, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_CGrecordLength); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 959, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_CGrecordLength, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 959, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":748 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":960 + * index[record_id] = 0 + * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength + * channel_name_set[record_id] = record[record_id]['record'].channelNames # <<<<<<<<<<<<<< + * # read data + * if record_id_size == 1: */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 960, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 960, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_channelNames); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 960, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_channel_name_set, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 960, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_L5:; - /* "dataRead.pyx":749 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 5: + /* "dataRead.pyx":943 + * cdef dict VLSD_CG_signal_data_type = {} + * cdef dict channel_name_set = {} + * for record_id in record: # <<<<<<<<<<<<<< + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + * VLSD_flag[record_id] = True */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":748 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":962 + * channel_name_set[record_id] = record[record_id]['record'].channelNames + * # read data + * if record_id_size == 1: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) */ - } + switch (__pyx_v_record_id_size) { + case 1: - /* "dataRead.pyx":750 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 5: - * if swap == 0: + /* "dataRead.pyx":963 + * # read data + * if record_id_size == 1: + * while position < data_block_length: # <<<<<<<<<<<<<< + * memcpy(&record_id_char, &bit_stream[position], 1) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - } - __pyx_L29:; + while (1) { + __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); + if (!__pyx_t_7) break; - /* "dataRead.pyx":722 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 6: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":964 + * if record_id_size == 1: + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) # <<<<<<<<<<<<<< + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, + * position, buf, VLSD, pos_byte_beg, pos_byte_end, */ - goto __pyx_L3; - } + (void)(memcpy((&__pyx_v_record_id_char), (&(__pyx_v_bit_stream[__pyx_v_position])), 1)); - /* "dataRead.pyx":751 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 5: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":965 + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, */ - __pyx_t_6 = (__pyx_v_n_bytes == 5); - if (__pyx_t_6) { + __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_record_id_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 965, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); - /* "dataRead.pyx":752 - * buf[i] = temp8byte - * elif n_bytes == 5: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":968 + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< + * elif record_id_size == 2: + * while position < data_block_length: */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 1, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 965, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 965, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_15 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 2); + __pyx_t_14 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_14); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 965, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; + __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 965, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L11_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 965, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L12_unpacking_done; + __pyx_L11_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 965, __pyx_L1_error) + __pyx_L12_unpacking_done:; + } - /* "dataRead.pyx":753 - * elif n_bytes == 5: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift + /* "dataRead.pyx":965 + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 965, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 965, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 965, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 965, __pyx_L1_error) + __pyx_v_position = __pyx_t_20; + __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_14)); + __pyx_t_14 = 0; + } - /* "dataRead.pyx":754 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":962 + * channel_name_set[record_id] = record[record_id]['record'].channelNames + * # read data + * if record_id_size == 1: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + break; + case 2: - /* "dataRead.pyx":756 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":970 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 2: + * while position < data_block_length: # <<<<<<<<<<<<<< + * memcpy(&record_id_short, &bit_stream[position], 2) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + while (1) { + __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); + if (!__pyx_t_7) break; - /* "dataRead.pyx":757 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 40: + /* "dataRead.pyx":971 + * elif record_id_size == 2: + * while position < data_block_length: + * memcpy(&record_id_short, &bit_stream[position], 2) # <<<<<<<<<<<<<< + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, + * position, buf, VLSD, pos_byte_beg, pos_byte_end, */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + (void)(memcpy((&__pyx_v_record_id_short), (&(__pyx_v_bit_stream[__pyx_v_position])), 2)); - /* "dataRead.pyx":756 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":972 + * while position < data_block_length: + * memcpy(&record_id_short, &bit_stream[position], 2) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, */ + __pyx_t_6 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_short); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 972, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "dataRead.pyx":975 + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< + * elif record_id_size == 3: + * while position < data_block_length: + */ + __pyx_t_14 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_6, 2, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 972, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) { + PyObject* sequence = __pyx_t_14; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 972, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_6 = PyList_GET_ITEM(sequence, 0); + __pyx_t_8 = PyList_GET_ITEM(sequence, 1); + __pyx_t_15 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_2); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 972, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; + __pyx_t_5 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 972, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L15_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 972, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L16_unpacking_done; + __pyx_L15_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 972, __pyx_L1_error) + __pyx_L16_unpacking_done:; + } - /* "dataRead.pyx":759 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 40: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - __pyx_t_6 = (__pyx_v_bit_count < 40); - if (__pyx_t_6) { - - /* "dataRead.pyx":760 - * # mask left part - * if bit_count < 40: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":972 + * while position < data_block_length: + * memcpy(&record_id_short, &bit_stream[position], 2) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_6); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 972, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 972, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 972, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 972, __pyx_L1_error) + __pyx_v_position = __pyx_t_20; + __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + } - /* "dataRead.pyx":759 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 40: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":969 + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 2: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_short, &bit_stream[position], 2) */ - } + break; + case 3: - /* "dataRead.pyx":761 - * if bit_count < 40: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + /* "dataRead.pyx":977 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 3: + * while position < data_block_length: # <<<<<<<<<<<<<< + * memcpy(&record_id_long, &bit_stream[position], 4) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + while (1) { + __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); + if (!__pyx_t_7) break; - /* "dataRead.pyx":762 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":978 + * elif record_id_size == 3: + * while position < data_block_length: + * memcpy(&record_id_long, &bit_stream[position], 4) # <<<<<<<<<<<<<< + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, + * position, buf, VLSD, pos_byte_beg, pos_byte_end, */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + (void)(memcpy((&__pyx_v_record_id_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); - /* "dataRead.pyx":763 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + /* "dataRead.pyx":979 + * while position < data_block_length: + * memcpy(&record_id_long, &bit_stream[position], 4) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_t_14 = __Pyx_PyInt_From_unsigned_long(__pyx_v_record_id_long); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 979, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); - /* "dataRead.pyx":762 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":982 + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< + * elif record_id_size == 4: + * while position < data_block_length: */ + __pyx_t_2 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_14, 4, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 979, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 979, __pyx_L1_error) } - - /* "dataRead.pyx":764 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_14 = PyList_GET_ITEM(sequence, 0); + __pyx_t_15 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 2); + __pyx_t_6 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_6); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 979, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; + __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 979, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L19_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 979, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L20_unpacking_done; + __pyx_L19_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 979, __pyx_L1_error) + __pyx_L20_unpacking_done:; } - /* "dataRead.pyx":752 - * buf[i] = temp8byte - * elif n_bytes == 5: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":979 + * while position < data_block_length: + * memcpy(&record_id_long, &bit_stream[position], 4) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, */ - goto __pyx_L40; + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_14); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 979, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 979, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 979, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_6))) __PYX_ERR(0, 979, __pyx_L1_error) + __pyx_v_position = __pyx_t_20; + __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_6)); + __pyx_t_6 = 0; } - /* "dataRead.pyx":766 - * buf[i] = temp8byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + /* "dataRead.pyx":976 + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 3: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_long, &bit_stream[position], 4) */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + break; + case 4: - /* "dataRead.pyx":767 - * else: - * for i in range(number_of_records): - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + /* "dataRead.pyx":984 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 4: + * while position < data_block_length: # <<<<<<<<<<<<<< + * memcpy(&record_id_long_long, &bit_stream[position], 8) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, */ - (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + while (1) { + __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); + if (!__pyx_t_7) break; - /* "dataRead.pyx":769 - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":985 + * elif record_id_size == 4: + * while position < data_block_length: + * memcpy(&record_id_long_long, &bit_stream[position], 8) # <<<<<<<<<<<<<< + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, + * position, buf, VLSD, pos_byte_beg, pos_byte_end, */ - __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); + (void)(memcpy((&__pyx_v_record_id_long_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 8)); - /* "dataRead.pyx":771 - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":986 + * while position < data_block_length: + * memcpy(&record_id_long_long, &bit_stream[position], 8) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __pyx_t_2 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_record_id_long_long); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 986, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); - /* "dataRead.pyx":772 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 40: + /* "dataRead.pyx":989 + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< + * # changing from bytes type to desired type + * if buf: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 8, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 986, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 986, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_8 = PyList_GET_ITEM(sequence, 1); + __pyx_t_15 = PyList_GET_ITEM(sequence, 2); + __pyx_t_14 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_14); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 986, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; + __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 986, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L23_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 986, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L24_unpacking_done; + __pyx_L23_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 986, __pyx_L1_error) + __pyx_L24_unpacking_done:; + } - /* "dataRead.pyx":771 - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":986 + * while position < data_block_length: + * memcpy(&record_id_long_long, &bit_stream[position], 8) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, */ - } + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 986, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 986, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 986, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 986, __pyx_L1_error) + __pyx_v_position = __pyx_t_20; + __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_14)); + __pyx_t_14 = 0; + } - /* "dataRead.pyx":774 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 40: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":983 + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 4: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_long_long, &bit_stream[position], 8) */ - __pyx_t_6 = (__pyx_v_bit_count < 40); - if (__pyx_t_6) { + break; + default: break; + } - /* "dataRead.pyx":775 - * # mask left part - * if bit_count < 40: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":991 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * # changing from bytes type to desired type + * if buf: # <<<<<<<<<<<<<< + * for name in buf.keys(): + * buf[name] = buf[name].view(dtype=numpy_format[name]) */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_buf); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 991, __pyx_L1_error) + if (__pyx_t_7) { - /* "dataRead.pyx":774 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 40: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":992 + * # changing from bytes type to desired type + * if buf: + * for name in buf.keys(): # <<<<<<<<<<<<<< + * buf[name] = buf[name].view(dtype=numpy_format[name]) + * # convert list to array for VLSD only */ - } + __pyx_t_3 = 0; + if (unlikely(__pyx_v_buf == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys"); + __PYX_ERR(0, 992, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_buf, 1, __pyx_n_s_keys, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 992, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_6); + __pyx_t_6 = __pyx_t_14; + __pyx_t_14 = 0; + while (1) { + __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_3, &__pyx_t_14, NULL, NULL, __pyx_t_12); + if (unlikely(__pyx_t_13 == 0)) break; + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 992, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_14); + __pyx_t_14 = 0; - /* "dataRead.pyx":776 - * if bit_count < 40: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + /* "dataRead.pyx":993 + * if buf: + * for name in buf.keys(): + * buf[name] = buf[name].view(dtype=numpy_format[name]) # <<<<<<<<<<<<<< + * # convert list to array for VLSD only + * if VLSD: */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + if (unlikely(__pyx_v_buf == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 993, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_buf, __pyx_v_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 993, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_view); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 993, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 993, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_numpy_format, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 993, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 993, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 993, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(__pyx_v_buf == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 993, __pyx_L1_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_v_name, __pyx_t_8) < 0))) __PYX_ERR(0, 993, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":777 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":991 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * # changing from bytes type to desired type + * if buf: # <<<<<<<<<<<<<< + * for name in buf.keys(): + * buf[name] = buf[name].view(dtype=numpy_format[name]) */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + } - /* "dataRead.pyx":778 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * return buf + /* "dataRead.pyx":995 + * buf[name] = buf[name].view(dtype=numpy_format[name]) + * # convert list to array for VLSD only + * if VLSD: # <<<<<<<<<<<<<< + * for channel_name in VLSD: + * VLSD[channel_name] = np.array(VLSD[channel_name]) */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_VLSD); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 995, __pyx_L1_error) + if (__pyx_t_7) { - /* "dataRead.pyx":777 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":996 + * # convert list to array for VLSD only + * if VLSD: + * for channel_name in VLSD: # <<<<<<<<<<<<<< + * VLSD[channel_name] = np.array(VLSD[channel_name]) + * buf.update(VLSD) + */ + __pyx_t_11 = 0; + if (unlikely(__pyx_v_VLSD == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 996, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_VLSD, 1, ((PyObject *)NULL), (&__pyx_t_3), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 996, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_6); + __pyx_t_6 = __pyx_t_8; + __pyx_t_8 = 0; + while (1) { + __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_3, &__pyx_t_11, &__pyx_t_8, NULL, NULL, __pyx_t_12); + if (unlikely(__pyx_t_13 == 0)) break; + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 996, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_8); + __pyx_t_8 = 0; + + /* "dataRead.pyx":997 + * if VLSD: + * for channel_name in VLSD: + * VLSD[channel_name] = np.array(VLSD[channel_name]) # <<<<<<<<<<<<<< + * buf.update(VLSD) + * return buf */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 997, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 997, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(__pyx_v_VLSD == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 997, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_VLSD, __pyx_v_channel_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 997, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_2 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_15))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_15); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_15, function); + __pyx_t_9 = 1; } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_14}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 997, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } + if (unlikely(__pyx_v_VLSD == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 997, __pyx_L1_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_v_channel_name, __pyx_t_8) < 0))) __PYX_ERR(0, 997, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":779 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":998 + * for channel_name in VLSD: + * VLSD[channel_name] = np.array(VLSD[channel_name]) + * buf.update(VLSD) # <<<<<<<<<<<<<< * return buf * */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - } - __pyx_L40:; + __pyx_t_6 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_buf, __pyx_v_VLSD); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 998, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":751 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 5: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":995 + * buf[name] = buf[name].view(dtype=numpy_format[name]) + * # convert list to array for VLSD only + * if VLSD: # <<<<<<<<<<<<<< + * for channel_name in VLSD: + * VLSD[channel_name] = np.array(VLSD[channel_name]) */ } - __pyx_L3:; - /* "dataRead.pyx":780 - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":999 + * VLSD[channel_name] = np.array(VLSD[channel_name]) + * buf.update(VLSD) * return buf # <<<<<<<<<<<<<< * - * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, + * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); + __Pyx_INCREF(__pyx_v_buf); + __pyx_r = __pyx_v_buf; goto __pyx_L0; - /* "dataRead.pyx":641 - * return buf + /* "dataRead.pyx":897 + * return buf.byteswap() * - * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< + * const unsigned short record_id_size, + * const unsigned long long data_block_length): */ /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_signed_longlong", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_XDECREF(__pyx_t_18); + __Pyx_AddTraceback("dataRead.unsorted_data_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XDECREF(__pyx_v_buf); + __Pyx_XDECREF(__pyx_v_VLSD); + __Pyx_XDECREF(__pyx_v_pos_byte_beg); + __Pyx_XDECREF(__pyx_v_pos_byte_end); + __Pyx_XDECREF(__pyx_v_c_format_structure); + __Pyx_XDECREF(__pyx_v_byte_length); + __Pyx_XDECREF(__pyx_v_numpy_format); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XDECREF(__pyx_v_CGrecordLength); + __Pyx_XDECREF(__pyx_v_VLSD_flag); + __Pyx_XDECREF(__pyx_v_VLSD_CG_name); + __Pyx_XDECREF(__pyx_v_VLSD_CG_signal_data_type); + __Pyx_XDECREF(__pyx_v_channel_name_set); + __Pyx_XDECREF(__pyx_v_record_id); + __Pyx_XDECREF(__pyx_v_Channel); + __Pyx_XDECREF(__pyx_v_name); + __Pyx_XDECREF(__pyx_v_channel_name); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":782 +/* "dataRead.pyx":1001 * return buf * - * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset): + * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< + * unsigned short record_id_size, unsigned long long position, + * buf, VLSD, pos_byte_beg, pos_byte_end, c_format_structure, */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, CYTHON_UNUSED unsigned long __pyx_v_bit_count, CYTHON_UNUSED unsigned char __pyx_v_bit_offset) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned long __pyx_v_pos_byte_end; +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__pyx_v_bit_stream, PyObject *__pyx_v_tmp, PyObject *__pyx_v_record_id, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_position, PyObject *__pyx_v_buf, PyObject *__pyx_v_VLSD, PyObject *__pyx_v_pos_byte_beg, PyObject *__pyx_v_pos_byte_end, CYTHON_UNUSED PyObject *__pyx_v_c_format_structure, PyObject *__pyx_v_index, PyObject *__pyx_v_CGrecordLength, PyObject *__pyx_v_VLSD_flag, PyObject *__pyx_v_VLSD_CG_name, PyObject *__pyx_v_VLSD_CG_signal_data_type, PyObject *__pyx_v_channel_name_set) { + unsigned long __pyx_v_VLSDLen; + PyObject *__pyx_v_channel_name = NULL; + PyObject *__pyx_v_signal_data_type = NULL; + PyObject *__pyx_v_temp = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; + int __pyx_t_2; + int __pyx_t_3; PyObject *__pyx_t_4 = NULL; - unsigned PY_LONG_LONG __pyx_t_5; - unsigned PY_LONG_LONG __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + Py_ssize_t __pyx_t_10; + Py_ssize_t __pyx_t_11; + unsigned PY_LONG_LONG __pyx_t_12; + int __pyx_t_13; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_byte", 1); + __Pyx_RefNannySetupContext("unsorted_read4", 1); - /* "dataRead.pyx":785 - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset): - * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + /* "dataRead.pyx":1006 + * index, CGrecordLength, VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, + * channel_name_set): + * cdef unsigned long VLSDLen = 0 # <<<<<<<<<<<<<< + * if not VLSD_flag[record_id]: # not VLSD CG) + * for channel_name in channel_name_set[record_id]: # list of channel classes */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 785, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 785, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error) + __pyx_v_VLSDLen = 0; + + /* "dataRead.pyx":1007 + * channel_name_set): + * cdef unsigned long VLSDLen = 0 + * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< + * for channel_name in channel_name_set[record_id]: # list of channel classes + * buf[channel_name][index[record_id]] = \ + */ + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_flag, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1007, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 785, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 785, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1007, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 785, __pyx_L1_error) - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_3 = (!__pyx_t_2); + if (__pyx_t_3) { - /* "dataRead.pyx":787 - * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ + /* "dataRead.pyx":1008 + * cdef unsigned long VLSDLen = 0 + * if not VLSD_flag[record_id]: # not VLSD CG) + * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< + * buf[channel_name][index[record_id]] = \ + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] */ - __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_channel_name_set, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { + __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); + __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1008, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1008, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1008, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1008, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1008, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1008, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } + } else { + __pyx_t_1 = __pyx_t_6(__pyx_t_4); + if (unlikely(!__pyx_t_1)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 1008, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_1); + __pyx_t_1 = 0; - /* "dataRead.pyx":788 - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i]) + /* "dataRead.pyx":1010 + * for channel_name in channel_name_set[record_id]: # list of channel classes + * buf[channel_name][index[record_id]] = \ + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] # <<<<<<<<<<<<<< + * index[record_id] += 1 + * position += CGrecordLength[record_id] */ - __pyx_t_5 = __pyx_v_number_of_records; - __pyx_t_6 = __pyx_t_5; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { - __pyx_v_i = __pyx_t_7; + if (unlikely(__pyx_v_tmp == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1010, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_beg, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1010, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1010, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_3 = (__pyx_t_8 == Py_None); + if (__pyx_t_3) { + __pyx_t_9 = 0; + } else { + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L1_error) + __pyx_t_9 = __pyx_t_10; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1010, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_end, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1010, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_3 = (__pyx_t_1 == Py_None); + if (__pyx_t_3) { + __pyx_t_10 = PY_SSIZE_T_MAX; + } else { + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L1_error) + __pyx_t_10 = __pyx_t_11; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PySequence_GetSlice(__pyx_v_tmp, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); - /* "dataRead.pyx":789 - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): - * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< - * pos_byte_end + record_byte_size * i]) - * return buf + /* "dataRead.pyx":1009 + * if not VLSD_flag[record_id]: # not VLSD CG) + * for channel_name in channel_name_set[record_id]: # list of channel classes + * buf[channel_name][index[record_id]] = \ # <<<<<<<<<<<<<< + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + * index[record_id] += 1 + */ + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_buf, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1009, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1009, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_t_8, __pyx_t_1) < 0))) __PYX_ERR(0, 1009, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dataRead.pyx":1008 + * cdef unsigned long VLSDLen = 0 + * if not VLSD_flag[record_id]: # not VLSD CG) + * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< + * buf[channel_name][index[record_id]] = \ + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1011 + * buf[channel_name][index[record_id]] = \ + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + * index[record_id] += 1 # <<<<<<<<<<<<<< + * position += CGrecordLength[record_id] + * else: # VLSD CG + */ + __Pyx_INCREF(__pyx_v_record_id); + __pyx_t_4 = __pyx_v_record_id; + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1011, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely((PyObject_SetItem(__pyx_v_index, __pyx_t_4, __pyx_t_8) < 0))) __PYX_ERR(0, 1011, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1012 + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + * index[record_id] += 1 + * position += CGrecordLength[record_id] # <<<<<<<<<<<<<< + * else: # VLSD CG + * position += record_id_size */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 789, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1012, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 789, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_CGrecordLength, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1012, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1012, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_1, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 789, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_1); if (unlikely((__pyx_t_12 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1012, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_position = __pyx_t_12; + + /* "dataRead.pyx":1007 + * channel_name_set): + * cdef unsigned long VLSDLen = 0 + * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< + * for channel_name in channel_name_set[record_id]: # list of channel classes + * buf[channel_name][index[record_id]] = \ + */ + goto __pyx_L3; } - /* "dataRead.pyx":791 - * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i]) - * return buf # <<<<<<<<<<<<<< - * - * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, + /* "dataRead.pyx":1014 + * position += CGrecordLength[record_id] + * else: # VLSD CG + * position += record_id_size # <<<<<<<<<<<<<< + * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length + * position += 4 */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + /*else*/ { + __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_record_id_size)); - /* "dataRead.pyx":782 - * return buf - * - * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset): + /* "dataRead.pyx":1015 + * else: # VLSD CG + * position += record_id_size + * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length # <<<<<<<<<<<<<< + * position += 4 + * signal_data_type = VLSD_CG_signal_data_type[record_id] */ + (void)(memcpy((&__pyx_v_VLSDLen), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); - /* 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_AddTraceback("dataRead.read_byte", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":1016 + * position += record_id_size + * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length + * position += 4 # <<<<<<<<<<<<<< + * signal_data_type = VLSD_CG_signal_data_type[record_id] + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + */ + __pyx_v_position = (__pyx_v_position + 4); -/* "dataRead.pyx":793 - * return buf - * - * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + /* "dataRead.pyx":1017 + * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length + * position += 4 + * signal_data_type = VLSD_CG_signal_data_type[record_id] # <<<<<<<<<<<<<< + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + * if signal_data_type == 6: */ + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_signal_data_type = __pyx_t_1; + __pyx_t_1 = 0; -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, CYTHON_UNUSED unsigned long __pyx_v_bit_count, CYTHON_UNUSED unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned long __pyx_v_pos_byte_end; - 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; - unsigned PY_LONG_LONG __pyx_t_5; - unsigned PY_LONG_LONG __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - int __pyx_t_8; - unsigned int __pyx_t_9; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_array", 1); + /* "dataRead.pyx":1018 + * position += 4 + * signal_data_type = VLSD_CG_signal_data_type[record_id] + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes # <<<<<<<<<<<<<< + * if signal_data_type == 6: + * temp = temp.decode('ISO8859') + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_position, ((__pyx_v_position + __pyx_v_VLSDLen) - 1) - __pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1018, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_temp = __pyx_t_8; + __pyx_t_8 = 0; - /* "dataRead.pyx":796 - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): - * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + /* "dataRead.pyx":1019 + * signal_data_type = VLSD_CG_signal_data_type[record_id] + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * temp = temp.decode('ISO8859') + * elif signal_data_type == 7: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 796, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 796, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 796, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 796, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 796, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 796, __pyx_L1_error) - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_6, 6, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1019, __pyx_L1_error) + if (__pyx_t_3) { - /* "dataRead.pyx":798 - * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + /* "dataRead.pyx":1020 + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + * if signal_data_type == 6: + * temp = temp.decode('ISO8859') # <<<<<<<<<<<<<< + * elif signal_data_type == 7: + * temp = temp.decode('utf-8') */ - __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1020, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); + __pyx_t_8 = 0; - /* "dataRead.pyx":799 - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) + /* "dataRead.pyx":1019 + * signal_data_type = VLSD_CG_signal_data_type[record_id] + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * temp = temp.decode('ISO8859') + * elif signal_data_type == 7: */ - __pyx_t_5 = __pyx_v_number_of_records; - __pyx_t_6 = __pyx_t_5; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { - __pyx_v_i = __pyx_t_7; + goto __pyx_L7; + } - /* "dataRead.pyx":800 - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: + /* "dataRead.pyx":1021 + * if signal_data_type == 6: + * temp = temp.decode('ISO8859') + * elif signal_data_type == 7: # <<<<<<<<<<<<<< + * temp = temp.decode('utf-8') + * elif signal_data_type == 8: */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 800, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_7, 7, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1021, __pyx_L1_error) + if (__pyx_t_3) { - /* "dataRead.pyx":801 - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":1022 + * temp = temp.decode('ISO8859') + * elif signal_data_type == 7: + * temp = temp.decode('utf-8') # <<<<<<<<<<<<<< + * elif signal_data_type == 8: + * temp = temp.decode('utf-16') */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 800, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1024, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); + __pyx_t_8 = 0; - /* "dataRead.pyx":800 - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: + /* "dataRead.pyx":1023 + * elif signal_data_type == 7: + * temp = temp.decode('utf-8') + * elif signal_data_type == 8: # <<<<<<<<<<<<<< + * temp = temp.decode('utf-16') + * VLSD[VLSD_CG_name[record_id]].append(temp) */ - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 801, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 801, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_9, 9, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1025, __pyx_L1_error) + if (__pyx_t_3) { - /* "dataRead.pyx":800 - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: + /* "dataRead.pyx":1026 + * temp = temp.decode('utf-16') # <<<<<<<<<<<<<< + * VLSD[VLSD_CG_name[record_id]].append(temp) + * position += VLSDLen */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_2, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 800, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1026, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); + __pyx_t_8 = 0; - /* "dataRead.pyx":802 - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":1025 + * elif signal_data_type == 8: + * temp = temp.decode('utf-16') + * VLSD[VLSD_CG_name[record_id]].append(temp) */ - __pyx_t_8 = (__pyx_v_swap == 0); - if (__pyx_t_8) { + } + __pyx_L7:; - /* "dataRead.pyx":803 - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":1027 + * elif signal_data_type == 9: + * temp = temp.decode('>utf-16') + * VLSD[VLSD_CG_name[record_id]].append(temp) # <<<<<<<<<<<<<< + * position += VLSDLen + * return position, buf, VLSD, index */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1027, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1027, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_temp); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1027, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":802 - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":1028 + * temp = temp.decode('>utf-16') + * VLSD[VLSD_CG_name[record_id]].append(temp) + * position += VLSDLen # <<<<<<<<<<<<<< + * return position, buf, VLSD, index + * */ + __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_VLSDLen)); } + __pyx_L3:; - /* "dataRead.pyx":805 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< + /* "dataRead.pyx":1029 + * VLSD[VLSD_CG_name[record_id]].append(temp) + * position += VLSDLen + * return position, buf, VLSD, index # <<<<<<<<<<<<<< + * * - * def unsorted_data_read4(record, info, bytes tmp, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 805, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_9 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 805, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1029, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1029, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1)) __PYX_ERR(0, 1029, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_buf); + __Pyx_GIVEREF(__pyx_v_buf); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_buf)) __PYX_ERR(0, 1029, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_VLSD); + __Pyx_GIVEREF(__pyx_v_VLSD); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_VLSD)) __PYX_ERR(0, 1029, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_index)) __PYX_ERR(0, 1029, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L0; - /* "dataRead.pyx":793 + /* "dataRead.pyx":1001 * return buf * - * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< + * unsigned short record_id_size, unsigned long long position, + * buf, VLSD, pos_byte_beg, pos_byte_end, c_format_structure, */ /* 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_AddTraceback("dataRead.read_array", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("dataRead.unsorted_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XDECREF(__pyx_v_channel_name); + __Pyx_XDECREF(__pyx_v_signal_data_type); + __Pyx_XDECREF(__pyx_v_temp); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":807 - * return buf.byteswap() +/* "dataRead.pyx":1032 * - * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< - * const unsigned short record_id_size, - * const unsigned long long data_block_length): + * + * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< + * unsigned long long sd_block_length, unsigned long long n_records): + * """ Reads vlsd channel from its SD Block bytes */ /* Python wrapper */ -static PyObject *__pyx_pw_8dataRead_3unsorted_data_read4(PyObject *__pyx_self, +static PyObject *__pyx_pw_8dataRead_5sd_data_read(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -PyDoc_STRVAR(__pyx_doc_8dataRead_2unsorted_data_read4, " reads only the channels using offset functions, channel by channel within unsorted data\n\n Parameters\n ------------\n record : class\n record class\n info: class\n info class\n tmp : bytes\n byte stream\n record_id_size : unsigned short\n record id length\n data_block_length : unsigned long long\n length of data block minus header\n\n Returns\n --------\n buf : array\n data array\n\n "); -static PyMethodDef __pyx_mdef_8dataRead_3unsorted_data_read4 = {"unsorted_data_read4", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_3unsorted_data_read4, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_2unsorted_data_read4}; -static PyObject *__pyx_pw_8dataRead_3unsorted_data_read4(PyObject *__pyx_self, +PyDoc_STRVAR(__pyx_doc_8dataRead_4sd_data_read, " Reads vlsd channel from its SD Block bytes\n\n Parameters\n ----------------\n signal_data_type : int\n\n sd_block : bytes\n SD Block bytes\n\n sd_block_length: int\n SD Block data length (header not included)\n\n n_records: int\n number of records\n\n Returns\n -----------\n array\n "); +static PyMethodDef __pyx_mdef_8dataRead_5sd_data_read = {"sd_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_5sd_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_4sd_data_read}; +static PyObject *__pyx_pw_8dataRead_5sd_data_read(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { - PyObject *__pyx_v_record = 0; - PyObject *__pyx_v_info = 0; - PyObject *__pyx_v_tmp = 0; - unsigned short __pyx_v_record_id_size; - unsigned PY_LONG_LONG __pyx_v_data_block_length; + unsigned short __pyx_v_signal_data_type; + PyObject *__pyx_v_sd_block = 0; + CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length; + unsigned PY_LONG_LONG __pyx_v_n_records; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[5] = {0,0,0,0,0}; + PyObject* values[4] = {0,0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("unsorted_data_read4 (wrapper)", 0); + __Pyx_RefNannySetupContext("sd_data_read (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); @@ -30288,12 +34868,10 @@ PyObject *__pyx_args, PyObject *__pyx_kwds #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_record,&__pyx_n_s_info,&__pyx_n_s_tmp,&__pyx_n_s_record_id_size,&__pyx_n_s_data_block_length,0}; + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signal_data_type,&__pyx_n_s_sd_block,&__pyx_n_s_sd_block_length,&__pyx_n_s_n_records,0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { - case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); @@ -30308,2138 +34886,1493 @@ PyObject *__pyx_args, PyObject *__pyx_kwds kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); switch (__pyx_nargs) { case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record)) != 0)) { + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 807, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_info)) != 0)) { + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sd_block)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 807, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 1); __PYX_ERR(0, 807, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 1); __PYX_ERR(0, 1032, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tmp)) != 0)) { + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sd_block_length)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 807, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 2); __PYX_ERR(0, 807, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 2); __PYX_ERR(0, 1032, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: - if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_id_size)) != 0)) { + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_records)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 807, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 3); __PYX_ERR(0, 807, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data_block_length)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 807, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 4); __PYX_ERR(0, 807, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "unsorted_data_read4") < 0)) __PYX_ERR(0, 807, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 5)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - } - __pyx_v_record = values[0]; - __pyx_v_info = values[1]; - __pyx_v_tmp = ((PyObject*)values[2]); - __pyx_v_record_id_size = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_record_id_size == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 808, __pyx_L3_error) - __pyx_v_data_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_data_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 809, __pyx_L3_error) - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 807, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("dataRead.unsorted_data_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 807, __pyx_L1_error) - __pyx_r = __pyx_pf_8dataRead_2unsorted_data_read4(__pyx_self, __pyx_v_record, __pyx_v_info, __pyx_v_tmp, __pyx_v_record_id_size, __pyx_v_data_block_length); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_8dataRead_2unsorted_data_read4(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_record, PyObject *__pyx_v_info, PyObject *__pyx_v_tmp, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_data_block_length) { - char const *__pyx_v_bit_stream; - unsigned PY_LONG_LONG __pyx_v_position; - unsigned char __pyx_v_record_id_char; - unsigned short __pyx_v_record_id_short; - unsigned long __pyx_v_record_id_long; - unsigned PY_LONG_LONG __pyx_v_record_id_long_long; - PyObject *__pyx_v_buf = 0; - PyObject *__pyx_v_VLSD = 0; - PyObject *__pyx_v_pos_byte_beg = 0; - PyObject *__pyx_v_pos_byte_end = 0; - PyObject *__pyx_v_c_format_structure = 0; - CYTHON_UNUSED PyObject *__pyx_v_byte_length = 0; - PyObject *__pyx_v_numpy_format = 0; - PyObject *__pyx_v_index = 0; - PyObject *__pyx_v_CGrecordLength = 0; - PyObject *__pyx_v_VLSD_flag = 0; - PyObject *__pyx_v_VLSD_CG_name = 0; - PyObject *__pyx_v_VLSD_CG_signal_data_type = 0; - PyObject *__pyx_v_channel_name_set = 0; - PyObject *__pyx_v_record_id = NULL; - PyObject *__pyx_v_Channel = NULL; - PyObject *__pyx_v_name = NULL; - PyObject *__pyx_v_channel_name = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - char *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - unsigned int __pyx_t_9; - Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - int __pyx_t_12; - int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - PyObject *(*__pyx_t_19)(PyObject *); - unsigned PY_LONG_LONG __pyx_t_20; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("unsorted_data_read4", 1); - - /* "dataRead.pyx":831 - * - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< - * cdef unsigned long long position = 0 - * cdef unsigned char record_id_char = 0 - */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 831, __pyx_L1_error) - __pyx_v_bit_stream = __pyx_t_1; - - /* "dataRead.pyx":832 - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * cdef unsigned long long position = 0 # <<<<<<<<<<<<<< - * cdef unsigned char record_id_char = 0 - * cdef unsigned short record_id_short = 0 - */ - __pyx_v_position = 0; - - /* "dataRead.pyx":833 - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * cdef unsigned long long position = 0 - * cdef unsigned char record_id_char = 0 # <<<<<<<<<<<<<< - * cdef unsigned short record_id_short = 0 - * cdef unsigned long record_id_long = 0 - */ - __pyx_v_record_id_char = 0; - - /* "dataRead.pyx":834 - * cdef unsigned long long position = 0 - * cdef unsigned char record_id_char = 0 - * cdef unsigned short record_id_short = 0 # <<<<<<<<<<<<<< - * cdef unsigned long record_id_long = 0 - * cdef unsigned long long record_id_long_long = 0 - */ - __pyx_v_record_id_short = 0; - - /* "dataRead.pyx":835 - * cdef unsigned char record_id_char = 0 - * cdef unsigned short record_id_short = 0 - * cdef unsigned long record_id_long = 0 # <<<<<<<<<<<<<< - * cdef unsigned long long record_id_long_long = 0 - * # initialise data structure - */ - __pyx_v_record_id_long = 0; - - /* "dataRead.pyx":836 - * cdef unsigned short record_id_short = 0 - * cdef unsigned long record_id_long = 0 - * cdef unsigned long long record_id_long_long = 0 # <<<<<<<<<<<<<< - * # initialise data structure - * # key is channel name - */ - __pyx_v_record_id_long_long = 0; - - /* "dataRead.pyx":839 - * # initialise data structure - * # key is channel name - * cdef dict buf = {} # <<<<<<<<<<<<<< - * cdef dict VLSD = {} - * cdef dict pos_byte_beg = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 839, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_buf = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":840 - * # key is channel name - * cdef dict buf = {} - * cdef dict VLSD = {} # <<<<<<<<<<<<<< - * cdef dict pos_byte_beg = {} - * cdef dict pos_byte_end = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 840, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_VLSD = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":841 - * cdef dict buf = {} - * cdef dict VLSD = {} - * cdef dict pos_byte_beg = {} # <<<<<<<<<<<<<< - * cdef dict pos_byte_end = {} - * cdef dict c_format_structure = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 841, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_pos_byte_beg = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":842 - * cdef dict VLSD = {} - * cdef dict pos_byte_beg = {} - * cdef dict pos_byte_end = {} # <<<<<<<<<<<<<< - * cdef dict c_format_structure = {} - * cdef dict byte_length = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_pos_byte_end = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":843 - * cdef dict pos_byte_beg = {} - * cdef dict pos_byte_end = {} - * cdef dict c_format_structure = {} # <<<<<<<<<<<<<< - * cdef dict byte_length = {} - * cdef dict numpy_format = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 843, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_c_format_structure = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":844 - * cdef dict pos_byte_end = {} - * cdef dict c_format_structure = {} - * cdef dict byte_length = {} # <<<<<<<<<<<<<< - * cdef dict numpy_format = {} - * # key is record id - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 844, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_byte_length = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":845 - * cdef dict c_format_structure = {} - * cdef dict byte_length = {} - * cdef dict numpy_format = {} # <<<<<<<<<<<<<< - * # key is record id - * cdef dict index = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 845, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_numpy_format = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":847 - * cdef dict numpy_format = {} - * # key is record id - * cdef dict index = {} # <<<<<<<<<<<<<< - * cdef dict CGrecordLength = {} - * cdef dict VLSD_flag = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 847, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_index = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":848 - * # key is record id - * cdef dict index = {} - * cdef dict CGrecordLength = {} # <<<<<<<<<<<<<< - * cdef dict VLSD_flag = {} - * cdef dict VLSD_CG_name = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_CGrecordLength = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":849 - * cdef dict index = {} - * cdef dict CGrecordLength = {} - * cdef dict VLSD_flag = {} # <<<<<<<<<<<<<< - * cdef dict VLSD_CG_name = {} - * cdef dict VLSD_CG_signal_data_type = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 849, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_VLSD_flag = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":850 - * cdef dict CGrecordLength = {} - * cdef dict VLSD_flag = {} - * cdef dict VLSD_CG_name = {} # <<<<<<<<<<<<<< - * cdef dict VLSD_CG_signal_data_type = {} - * cdef dict channel_name_set = {} - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 850, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_VLSD_CG_name = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":851 - * cdef dict VLSD_flag = {} - * cdef dict VLSD_CG_name = {} - * cdef dict VLSD_CG_signal_data_type = {} # <<<<<<<<<<<<<< - * cdef dict channel_name_set = {} - * for record_id in record: - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 851, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_VLSD_CG_signal_data_type = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":852 - * cdef dict VLSD_CG_name = {} - * cdef dict VLSD_CG_signal_data_type = {} - * cdef dict channel_name_set = {} # <<<<<<<<<<<<<< - * for record_id in record: - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_channel_name_set = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "dataRead.pyx":853 - * cdef dict VLSD_CG_signal_data_type = {} - * cdef dict channel_name_set = {} - * for record_id in record: # <<<<<<<<<<<<<< - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - * VLSD_flag[record_id] = True - */ - if (likely(PyList_CheckExact(__pyx_v_record)) || PyTuple_CheckExact(__pyx_v_record)) { - __pyx_t_2 = __pyx_v_record; __Pyx_INCREF(__pyx_t_2); - __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_record); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 853, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 853, __pyx_L1_error) - } - for (;;) { - if (likely(!__pyx_t_4)) { - if (likely(PyList_CheckExact(__pyx_t_2))) { - { - Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); - #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 853, __pyx_L1_error) - #endif - if (__pyx_t_3 >= __pyx_temp) break; - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 853, __pyx_L1_error) - #else - __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 853, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - } else { - { - Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2); - #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 853, __pyx_L1_error) - #endif - if (__pyx_t_3 >= __pyx_temp) break; + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 3); __PYX_ERR(0, 1032, __pyx_L3_error) } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 853, __pyx_L1_error) - #else - __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 853, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif } - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 853, __pyx_L1_error) - } - break; + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sd_data_read") < 0)) __PYX_ERR(0, 1032, __pyx_L3_error) } - __Pyx_GOTREF(__pyx_t_5); + } else if (unlikely(__pyx_nargs != 4)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); } - __Pyx_XDECREF_SET(__pyx_v_record_id, __pyx_t_5); - __pyx_t_5 = 0; - - /* "dataRead.pyx":854 - * cdef dict channel_name_set = {} - * for record_id in record: - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< - * VLSD_flag[record_id] = True - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] - */ - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 854, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 854, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_Flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 854, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyInt_AndObjC(__pyx_t_5, __pyx_int_33, 33, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 854, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 854, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_7) { - - /* "dataRead.pyx":855 - * for record_id in record: - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - * VLSD_flag[record_id] = True # <<<<<<<<<<<<<< - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] - * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] - */ - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_True) < 0))) __PYX_ERR(0, 855, __pyx_L1_error) - - /* "dataRead.pyx":856 - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - * VLSD_flag[record_id] = True - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] # <<<<<<<<<<<<<< - * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] - * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) - */ - __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 856, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 856, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 856, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 856, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 856, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channelName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 856, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_t_5, __pyx_t_6) < 0))) __PYX_ERR(0, 856, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) + __pyx_v_sd_block = ((PyObject*)values[1]); + __pyx_v_sd_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_sd_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1033, __pyx_L3_error) + __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[3]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1033, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1032, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.sd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sd_block), (&PyBytes_Type), 1, "sd_block", 1))) __PYX_ERR(0, 1032, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_4sd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_sd_block, __pyx_v_sd_block_length, __pyx_v_n_records); - /* "dataRead.pyx":857 - * VLSD_flag[record_id] = True - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] - * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] # <<<<<<<<<<<<<< - * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) - * else: - */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 857, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 857, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 857, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 857, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_channelName); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 857, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 857, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":858 - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] - * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] - * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) # <<<<<<<<<<<<<< - * else: - * VLSD_flag[record_id] = False - */ - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 858, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 858, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 858, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 858, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channel); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 858, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_signal_data_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 858, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_9 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_info}; - __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 858, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 858, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; +static PyObject *__pyx_pf_8dataRead_4sd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_sd_block, CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length, unsigned PY_LONG_LONG __pyx_v_n_records) { + char const *__pyx_v_bit_stream; + unsigned long __pyx_v_max_len; + unsigned long __pyx_v_vlsd_len; + unsigned long *__pyx_v_VLSDLen; + unsigned PY_LONG_LONG *__pyx_v_pointer; + unsigned PY_LONG_LONG __pyx_v_rec; + PyObject *__pyx_v_channel_format = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + unsigned PY_LONG_LONG __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_t_7; + char const *__pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("sd_data_read", 1); - /* "dataRead.pyx":854 - * cdef dict channel_name_set = {} - * for record_id in record: - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< - * VLSD_flag[record_id] = True - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + /* "dataRead.pyx":1053 + * array + * """ + * cdef const char* bit_stream = PyBytes_AsString(sd_block) # <<<<<<<<<<<<<< + * cdef unsigned long max_len = 0 + * cdef unsigned long vlsd_len = 0 */ - goto __pyx_L5; - } + __pyx_t_1 = PyBytes_AsString(__pyx_v_sd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1053, __pyx_L1_error) + __pyx_v_bit_stream = __pyx_t_1; - /* "dataRead.pyx":860 - * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) - * else: - * VLSD_flag[record_id] = False # <<<<<<<<<<<<<< - * for Channel in record[record_id]['record'].values(): - * #if not Channel.VLSD_CG_Flag: + /* "dataRead.pyx":1054 + * """ + * cdef const char* bit_stream = PyBytes_AsString(sd_block) + * cdef unsigned long max_len = 0 # <<<<<<<<<<<<<< + * cdef unsigned long vlsd_len = 0 + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) */ - /*else*/ { - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_False) < 0))) __PYX_ERR(0, 860, __pyx_L1_error) + __pyx_v_max_len = 0; - /* "dataRead.pyx":861 - * else: - * VLSD_flag[record_id] = False - * for Channel in record[record_id]['record'].values(): # <<<<<<<<<<<<<< - * #if not Channel.VLSD_CG_Flag: - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), + /* "dataRead.pyx":1055 + * cdef const char* bit_stream = PyBytes_AsString(sd_block) + * cdef unsigned long max_len = 0 + * cdef unsigned long vlsd_len = 0 # <<<<<<<<<<<<<< + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) */ - __pyx_t_10 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 861, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 861, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(__pyx_t_5 == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 861, __pyx_L1_error) - } - __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 861, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); - __pyx_t_6 = __pyx_t_8; - __pyx_t_8 = 0; - while (1) { - __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_10, NULL, &__pyx_t_8, NULL, __pyx_t_12); - if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 861, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_Channel, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_v_vlsd_len = 0; - /* "dataRead.pyx":863 - * for Channel in record[record_id]['record'].values(): - * #if not Channel.VLSD_CG_Flag: - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') - * numpy_format[Channel.name] = Channel.data_format(info) + /* "dataRead.pyx":1056 + * cdef unsigned long max_len = 0 + * cdef unsigned long vlsd_len = 0 + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) # <<<<<<<<<<<<<< + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + * cdef unsigned long long rec = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_numberOfRecords); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_GIVEREF(__pyx_t_8); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_8)) __PYX_ERR(0, 863, __pyx_L1_error); - __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_14); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14)) __PYX_ERR(0, 863, __pyx_L1_error); - __pyx_t_14 = 0; + __pyx_v_VLSDLen = ((unsigned long *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned long))))); - /* "dataRead.pyx":864 - * #if not Channel.VLSD_CG_Flag: - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') # <<<<<<<<<<<<<< - * numpy_format[Channel.name] = Channel.data_format(info) - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + /* "dataRead.pyx":1057 + * cdef unsigned long vlsd_len = 0 + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) # <<<<<<<<<<<<<< + * cdef unsigned long long rec = 0 + * if not VLSDLen or not pointer: */ - __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 864, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 864, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 864, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_18 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_16))) { - __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_16); - if (likely(__pyx_t_18)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); - __Pyx_INCREF(__pyx_t_18); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_16, function); - __pyx_t_9 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_17}; - __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 864, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - } - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 864, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 864, __pyx_L1_error) + __pyx_v_pointer = ((unsigned PY_LONG_LONG *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned PY_LONG_LONG))))); - /* "dataRead.pyx":863 - * for Channel in record[record_id]['record'].values(): - * #if not Channel.VLSD_CG_Flag: - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') - * numpy_format[Channel.name] = Channel.data_format(info) + /* "dataRead.pyx":1058 + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + * cdef unsigned long long rec = 0 # <<<<<<<<<<<<<< + * if not VLSDLen or not pointer: + * raise MemoryError() */ - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 863, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __pyx_v_rec = 0; - /* "dataRead.pyx":865 - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') - * numpy_format[Channel.name] = Channel.data_format(info) # <<<<<<<<<<<<<< - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + /* "dataRead.pyx":1059 + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + * cdef unsigned long long rec = 0 + * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< + * raise MemoryError() + * try: */ - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_data_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 865, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_14))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_14, function); - __pyx_t_9 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_info}; - __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 865, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 865, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_numpy_format, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 865, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __pyx_t_3 = (!(__pyx_v_VLSDLen != 0)); + if (!__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (!(__pyx_v_pointer != 0)); + __pyx_t_2 = __pyx_t_3; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_2)) { - /* "dataRead.pyx":866 - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') - * numpy_format[Channel.name] = Channel.data_format(info) - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset # <<<<<<<<<<<<<< - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned - * index[record_id] = 0 + /* "dataRead.pyx":1060 + * cdef unsigned long long rec = 0 + * if not VLSDLen or not pointer: + * raise MemoryError() # <<<<<<<<<<<<<< + * try: + * pointer[0] = 0 */ - __pyx_t_15 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 866, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_byteOffset); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 866, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 866, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 866, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_beg, __pyx_t_14, __pyx_t_8) < 0))) __PYX_ERR(0, 866, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + PyErr_NoMemory(); __PYX_ERR(0, 1060, __pyx_L1_error) - /* "dataRead.pyx":867 - * numpy_format[Channel.name] = Channel.data_format(info) - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned # <<<<<<<<<<<<<< - * index[record_id] = 0 - * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength + /* "dataRead.pyx":1059 + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + * cdef unsigned long long rec = 0 + * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< + * raise MemoryError() + * try: */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 867, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_pos_byte_beg, __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 867, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 867, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_15 = PyNumber_Add(__pyx_t_14, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 867, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 867, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_end, __pyx_t_8, __pyx_t_15) < 0))) __PYX_ERR(0, 867, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } - /* "dataRead.pyx":868 - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned - * index[record_id] = 0 # <<<<<<<<<<<<<< - * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength - * channel_name_set[record_id] = record[record_id]['record'].channelNames + /* "dataRead.pyx":1061 + * if not VLSDLen or not pointer: + * raise MemoryError() + * try: # <<<<<<<<<<<<<< + * pointer[0] = 0 + * VLSDLen[0] = 0 */ - if (unlikely((PyDict_SetItem(__pyx_v_index, __pyx_v_record_id, __pyx_int_0) < 0))) __PYX_ERR(0, 868, __pyx_L1_error) + /*try:*/ { - /* "dataRead.pyx":869 - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned - * index[record_id] = 0 - * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength # <<<<<<<<<<<<<< - * channel_name_set[record_id] = record[record_id]['record'].channelNames - * # read data + /* "dataRead.pyx":1062 + * raise MemoryError() + * try: + * pointer[0] = 0 # <<<<<<<<<<<<<< + * VLSDLen[0] = 0 + * for rec from 0 <= rec < n_records - 1 by 1: */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 869, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 869, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_CGrecordLength); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 869, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_CGrecordLength, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 869, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + (__pyx_v_pointer[0]) = 0; - /* "dataRead.pyx":870 - * index[record_id] = 0 - * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength - * channel_name_set[record_id] = record[record_id]['record'].channelNames # <<<<<<<<<<<<<< - * # read data - * if record_id_size == 1: + /* "dataRead.pyx":1063 + * try: + * pointer[0] = 0 + * VLSDLen[0] = 0 # <<<<<<<<<<<<<< + * for rec from 0 <= rec < n_records - 1 by 1: + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 870, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 870, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_channelNames); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 870, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_channel_name_set, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 870, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __pyx_L5:; + (__pyx_v_VLSDLen[0]) = 0; - /* "dataRead.pyx":853 - * cdef dict VLSD_CG_signal_data_type = {} - * cdef dict channel_name_set = {} - * for record_id in record: # <<<<<<<<<<<<<< - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - * VLSD_flag[record_id] = True + /* "dataRead.pyx":1064 + * pointer[0] = 0 + * VLSDLen[0] = 0 + * for rec from 0 <= rec < n_records - 1 by 1: # <<<<<<<<<<<<<< + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_4 = (__pyx_v_n_records - 1); + for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_4; __pyx_v_rec+=1) { - /* "dataRead.pyx":872 - * channel_name_set[record_id] = record[record_id]['record'].channelNames - * # read data - * if record_id_size == 1: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) + /* "dataRead.pyx":1065 + * VLSDLen[0] = 0 + * for rec from 0 <= rec < n_records - 1 by 1: + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< + * VLSDLen[rec] = vlsd_len + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] */ - switch (__pyx_v_record_id_size) { - case 1: + (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); - /* "dataRead.pyx":873 - * # read data - * if record_id_size == 1: - * while position < data_block_length: # <<<<<<<<<<<<<< - * memcpy(&record_id_char, &bit_stream[position], 1) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, + /* "dataRead.pyx":1066 + * for rec from 0 <= rec < n_records - 1 by 1: + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + * if VLSDLen[rec] > max_len: */ - while (1) { - __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); - if (!__pyx_t_7) break; + (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; - /* "dataRead.pyx":874 - * if record_id_size == 1: - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) # <<<<<<<<<<<<<< - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, - * position, buf, VLSD, pos_byte_beg, pos_byte_end, + /* "dataRead.pyx":1067 + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] # <<<<<<<<<<<<<< + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] */ - (void)(memcpy((&__pyx_v_record_id_char), (&(__pyx_v_bit_stream[__pyx_v_position])), 1)); + (__pyx_v_pointer[(__pyx_v_rec + 1)]) = (((__pyx_v_VLSDLen[__pyx_v_rec]) + 4) + (__pyx_v_pointer[__pyx_v_rec])); - /* "dataRead.pyx":875 - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1068 + * VLSDLen[rec] = vlsd_len + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< + * max_len = VLSDLen[rec] + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) */ - __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_record_id_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); + if (__pyx_t_2) { - /* "dataRead.pyx":878 - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< - * elif record_id_size == 2: - * while position < data_block_length: + /* "dataRead.pyx":1069 + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len */ - __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 1, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { - PyObject* sequence = __pyx_t_6; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 875, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_15 = PyList_GET_ITEM(sequence, 1); - __pyx_t_8 = PyList_GET_ITEM(sequence, 2); - __pyx_t_14 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_14); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L11_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 875, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L12_unpacking_done; - __pyx_L11_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 875, __pyx_L1_error) - __pyx_L12_unpacking_done:; - } + __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); - /* "dataRead.pyx":875 - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1068 + * VLSDLen[rec] = vlsd_len + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< + * max_len = VLSDLen[rec] + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 875, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 875, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 875, __pyx_L1_error) - __pyx_v_position = __pyx_t_20; - __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); - __pyx_t_15 = 0; - __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_14)); - __pyx_t_14 = 0; + } } - /* "dataRead.pyx":872 - * channel_name_set[record_id] = record[record_id]['record'].channelNames - * # read data - * if record_id_size == 1: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) - */ - break; - case 2: - - /* "dataRead.pyx":880 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 2: - * while position < data_block_length: # <<<<<<<<<<<<<< - * memcpy(&record_id_short, &bit_stream[position], 2) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, + /* "dataRead.pyx":1070 + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< + * VLSDLen[rec] = vlsd_len + * if VLSDLen[rec] > max_len: */ - while (1) { - __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); - if (!__pyx_t_7) break; + (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); - /* "dataRead.pyx":881 - * elif record_id_size == 2: - * while position < data_block_length: - * memcpy(&record_id_short, &bit_stream[position], 2) # <<<<<<<<<<<<<< - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, - * position, buf, VLSD, pos_byte_beg, pos_byte_end, + /* "dataRead.pyx":1071 + * max_len = VLSDLen[rec] + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] */ - (void)(memcpy((&__pyx_v_record_id_short), (&(__pyx_v_bit_stream[__pyx_v_position])), 2)); + (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; - /* "dataRead.pyx":882 - * while position < data_block_length: - * memcpy(&record_id_short, &bit_stream[position], 2) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1072 + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len + * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< + * max_len = VLSDLen[rec] + * if max_len != 0: */ - __pyx_t_6 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_short); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 882, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); + if (__pyx_t_2) { - /* "dataRead.pyx":885 - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< - * elif record_id_size == 3: - * while position < data_block_length: + /* "dataRead.pyx":1073 + * VLSDLen[rec] = vlsd_len + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: */ - __pyx_t_14 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_6, 2, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 882, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) { - PyObject* sequence = __pyx_t_14; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 882, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_6 = PyList_GET_ITEM(sequence, 0); - __pyx_t_8 = PyList_GET_ITEM(sequence, 1); - __pyx_t_15 = PyList_GET_ITEM(sequence, 2); - __pyx_t_2 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(__pyx_t_2); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 882, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 882, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L15_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 882, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L16_unpacking_done; - __pyx_L15_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 882, __pyx_L1_error) - __pyx_L16_unpacking_done:; - } + __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); - /* "dataRead.pyx":882 - * while position < data_block_length: - * memcpy(&record_id_short, &bit_stream[position], 2) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1072 + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len + * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< + * max_len = VLSDLen[rec] + * if max_len != 0: */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_6); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 882, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 882, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 882, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 882, __pyx_L1_error) - __pyx_v_position = __pyx_t_20; - __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_15)); - __pyx_t_15 = 0; - __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_2)); - __pyx_t_2 = 0; } - /* "dataRead.pyx":879 - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 2: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_short, &bit_stream[position], 2) + /* "dataRead.pyx":1074 + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] + * if max_len != 0: # <<<<<<<<<<<<<< + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: */ - break; - case 3: + __pyx_t_2 = (__pyx_v_max_len != 0); + if (__pyx_t_2) { - /* "dataRead.pyx":887 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 3: - * while position < data_block_length: # <<<<<<<<<<<<<< - * memcpy(&record_id_long, &bit_stream[position], 4) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, + /* "dataRead.pyx":1075 + * max_len = VLSDLen[rec] + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< + * if signal_data_type == 6: + * channel_format = 'ISO8859' */ - while (1) { - __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); - if (!__pyx_t_7) break; + __pyx_t_3 = (__pyx_v_signal_data_type < 10); + if (!__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_signal_data_type == 17); + __pyx_t_2 = __pyx_t_3; + __pyx_L15_bool_binop_done:; + if (__pyx_t_2) { - /* "dataRead.pyx":888 - * elif record_id_size == 3: - * while position < data_block_length: - * memcpy(&record_id_long, &bit_stream[position], 4) # <<<<<<<<<<<<<< - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, - * position, buf, VLSD, pos_byte_beg, pos_byte_end, + /* "dataRead.pyx":1076 + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * channel_format = 'ISO8859' + * elif signal_data_type == 7: */ - (void)(memcpy((&__pyx_v_record_id_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); + switch (__pyx_v_signal_data_type) { + case 6: - /* "dataRead.pyx":889 - * while position < data_block_length: - * memcpy(&record_id_long, &bit_stream[position], 4) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1077 + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: + * channel_format = 'ISO8859' # <<<<<<<<<<<<<< + * elif signal_data_type == 7: + * channel_format = 'utf-8' */ - __pyx_t_14 = __Pyx_PyInt_From_unsigned_long(__pyx_v_record_id_long); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 889, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); + __Pyx_INCREF(__pyx_n_u_ISO8859); + __pyx_v_channel_format = __pyx_n_u_ISO8859; - /* "dataRead.pyx":892 - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< - * elif record_id_size == 4: - * while position < data_block_length: + /* "dataRead.pyx":1076 + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * channel_format = 'ISO8859' + * elif signal_data_type == 7: */ - __pyx_t_2 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_14, 4, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 889, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { - PyObject* sequence = __pyx_t_2; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 889, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_14 = PyList_GET_ITEM(sequence, 0); - __pyx_t_15 = PyList_GET_ITEM(sequence, 1); - __pyx_t_8 = PyList_GET_ITEM(sequence, 2); - __pyx_t_6 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_6); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 889, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 889, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L19_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 889, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L20_unpacking_done; - __pyx_L19_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 889, __pyx_L1_error) - __pyx_L20_unpacking_done:; - } + break; + case 7: - /* "dataRead.pyx":889 - * while position < data_block_length: - * memcpy(&record_id_long, &bit_stream[position], 4) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1079 + * channel_format = 'ISO8859' + * elif signal_data_type == 7: + * channel_format = 'utf-8' # <<<<<<<<<<<<<< + * elif signal_data_type == 8: + * channel_format = ' 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 896, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_8 = PyList_GET_ITEM(sequence, 1); - __pyx_t_15 = PyList_GET_ITEM(sequence, 2); - __pyx_t_14 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(__pyx_t_14); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 896, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 896, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L23_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 896, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L24_unpacking_done; - __pyx_L23_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 896, __pyx_L1_error) - __pyx_L24_unpacking_done:; - } + break; + case 17: - /* "dataRead.pyx":896 - * while position < data_block_length: - * memcpy(&record_id_long_long, &bit_stream[position], 8) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, - */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 896, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 896, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 896, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 896, __pyx_L1_error) - __pyx_v_position = __pyx_t_20; - __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_15)); - __pyx_t_15 = 0; - __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_14)); - __pyx_t_14 = 0; - } + /* "dataRead.pyx":1085 + * channel_format = '>utf-16' + * elif signal_data_type == 17: + * channel_format = 'bom' # BOM-per-value detection # <<<<<<<<<<<<<< + * else: + * channel_format = 'utf-8' + */ + __Pyx_INCREF(__pyx_n_u_bom); + __pyx_v_channel_format = __pyx_n_u_bom; - /* "dataRead.pyx":893 - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 4: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_long_long, &bit_stream[position], 8) + /* "dataRead.pyx":1084 + * elif signal_data_type == 9: + * channel_format = '>utf-16' + * elif signal_data_type == 17: # <<<<<<<<<<<<<< + * channel_format = 'bom' # BOM-per-value detection + * else: */ - break; - default: break; - } + break; + default: - /* "dataRead.pyx":901 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * # changing from bytes type to desired type - * if buf: # <<<<<<<<<<<<<< - * for name in buf.keys(): - * buf[name] = buf[name].view(dtype=numpy_format[name]) + /* "dataRead.pyx":1087 + * channel_format = 'bom' # BOM-per-value detection + * else: + * channel_format = 'utf-8' # <<<<<<<<<<<<<< + * printf('signal_data_type should have fixed length') + * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_buf); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 901, __pyx_L1_error) - if (__pyx_t_7) { + __Pyx_INCREF(__pyx_kp_u_utf_8); + __pyx_v_channel_format = __pyx_kp_u_utf_8; - /* "dataRead.pyx":902 - * # changing from bytes type to desired type - * if buf: - * for name in buf.keys(): # <<<<<<<<<<<<<< - * buf[name] = buf[name].view(dtype=numpy_format[name]) - * # convert list to array for VLSD only + /* "dataRead.pyx":1088 + * else: + * channel_format = 'utf-8' + * printf('signal_data_type should have fixed length') # <<<<<<<<<<<<<< + * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) + * else: # byte arrays or mime types */ - __pyx_t_3 = 0; - if (unlikely(__pyx_v_buf == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys"); - __PYX_ERR(0, 902, __pyx_L1_error) - } - __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_buf, 1, __pyx_n_s_keys, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 902, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_6); - __pyx_t_6 = __pyx_t_14; - __pyx_t_14 = 0; - while (1) { - __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_3, &__pyx_t_14, NULL, NULL, __pyx_t_12); - if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 902, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_14); - __pyx_t_14 = 0; + (void)(printf(((char const *)"signal_data_type should have fixed length"))); + break; + } - /* "dataRead.pyx":903 - * if buf: - * for name in buf.keys(): - * buf[name] = buf[name].view(dtype=numpy_format[name]) # <<<<<<<<<<<<<< - * # convert list to array for VLSD only - * if VLSD: + /* "dataRead.pyx":1089 + * channel_format = 'utf-8' + * printf('signal_data_type should have fixed length') + * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) # <<<<<<<<<<<<<< + * else: # byte arrays or mime types + * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = __pyx_f_8dataRead_equalize_string_length(__pyx_v_bit_stream, __pyx_v_pointer, __pyx_v_VLSDLen, __pyx_v_max_len, __pyx_v_n_records, __pyx_v_channel_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1089, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L6_return; + + /* "dataRead.pyx":1075 + * max_len = VLSDLen[rec] + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< + * if signal_data_type == 6: + * channel_format = 'ISO8859' */ - if (unlikely(__pyx_v_buf == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 903, __pyx_L1_error) } - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_buf, __pyx_v_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 903, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_view); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 903, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 903, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_numpy_format, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 903, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 903, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 903, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(__pyx_v_buf == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 903, __pyx_L1_error) + + /* "dataRead.pyx":1091 + * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) + * else: # byte arrays or mime types + * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) # <<<<<<<<<<<<<< + * else: + * printf('VLSD channel could not be properly read\n') + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = __pyx_f_8dataRead_equalize_byte_length(__pyx_v_bit_stream, __pyx_v_pointer, __pyx_v_VLSDLen, __pyx_v_max_len, __pyx_v_n_records); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1091, __pyx_L7_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L6_return; } - if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_v_name, __pyx_t_8) < 0))) __PYX_ERR(0, 903, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":901 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * # changing from bytes type to desired type - * if buf: # <<<<<<<<<<<<<< - * for name in buf.keys(): - * buf[name] = buf[name].view(dtype=numpy_format[name]) + /* "dataRead.pyx":1074 + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] + * if max_len != 0: # <<<<<<<<<<<<<< + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: */ - } + } - /* "dataRead.pyx":905 - * buf[name] = buf[name].view(dtype=numpy_format[name]) - * # convert list to array for VLSD only - * if VLSD: # <<<<<<<<<<<<<< - * for channel_name in VLSD: - * VLSD[channel_name] = np.array(VLSD[channel_name]) + /* "dataRead.pyx":1093 + * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) + * else: + * printf('VLSD channel could not be properly read\n') # <<<<<<<<<<<<<< + * return None + * finally: */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_VLSD); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 905, __pyx_L1_error) - if (__pyx_t_7) { + /*else*/ { + (void)(printf(((char const *)"VLSD channel could not be properly read\n"))); - /* "dataRead.pyx":906 - * # convert list to array for VLSD only - * if VLSD: - * for channel_name in VLSD: # <<<<<<<<<<<<<< - * VLSD[channel_name] = np.array(VLSD[channel_name]) - * buf.update(VLSD) + /* "dataRead.pyx":1094 + * else: + * printf('VLSD channel could not be properly read\n') + * return None # <<<<<<<<<<<<<< + * finally: + * PyMem_Free(pointer) */ - __pyx_t_11 = 0; - if (unlikely(__pyx_v_VLSD == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 906, __pyx_L1_error) + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L6_return; } - __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_VLSD, 1, ((PyObject *)NULL), (&__pyx_t_3), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 906, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_6); - __pyx_t_6 = __pyx_t_8; - __pyx_t_8 = 0; - while (1) { - __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_3, &__pyx_t_11, &__pyx_t_8, NULL, NULL, __pyx_t_12); - if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 906, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_8); - __pyx_t_8 = 0; + } - /* "dataRead.pyx":907 - * if VLSD: - * for channel_name in VLSD: - * VLSD[channel_name] = np.array(VLSD[channel_name]) # <<<<<<<<<<<<<< - * buf.update(VLSD) - * return buf + /* "dataRead.pyx":1096 + * return None + * finally: + * PyMem_Free(pointer) # <<<<<<<<<<<<<< + * PyMem_Free(VLSDLen) + * */ - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 907, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 907, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(__pyx_v_VLSD == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 907, __pyx_L1_error) - } - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_VLSD, __pyx_v_channel_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 907, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_2 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_15))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_15); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_15, function); - __pyx_t_9 = 1; - } - } - #endif + /*finally:*/ { + __pyx_L7_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename; { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_14}; - __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 907, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + PyMem_Free(__pyx_v_pointer); + + /* "dataRead.pyx":1097 + * finally: + * PyMem_Free(pointer) + * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< + * + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + */ + PyMem_Free(__pyx_v_VLSDLen); } - if (unlikely(__pyx_v_VLSD == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 907, __pyx_L1_error) + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); } - if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_v_channel_name, __pyx_t_8) < 0))) __PYX_ERR(0, 907, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11); + __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; + __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8; + goto __pyx_L1_error; } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_L6_return: { + __pyx_t_14 = __pyx_r; + __pyx_r = 0; - /* "dataRead.pyx":908 - * for channel_name in VLSD: - * VLSD[channel_name] = np.array(VLSD[channel_name]) - * buf.update(VLSD) # <<<<<<<<<<<<<< - * return buf + /* "dataRead.pyx":1096 + * return None + * finally: + * PyMem_Free(pointer) # <<<<<<<<<<<<<< + * PyMem_Free(VLSDLen) * */ - __pyx_t_6 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_buf, __pyx_v_VLSD); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 908, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + PyMem_Free(__pyx_v_pointer); - /* "dataRead.pyx":905 - * buf[name] = buf[name].view(dtype=numpy_format[name]) - * # convert list to array for VLSD only - * if VLSD: # <<<<<<<<<<<<<< - * for channel_name in VLSD: - * VLSD[channel_name] = np.array(VLSD[channel_name]) + /* "dataRead.pyx":1097 + * finally: + * PyMem_Free(pointer) + * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< + * + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, */ + PyMem_Free(__pyx_v_VLSDLen); + __pyx_r = __pyx_t_14; + __pyx_t_14 = 0; + goto __pyx_L0; + } } - /* "dataRead.pyx":909 - * VLSD[channel_name] = np.array(VLSD[channel_name]) - * buf.update(VLSD) - * return buf # <<<<<<<<<<<<<< + /* "dataRead.pyx":1032 * - * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_buf); - __pyx_r = __pyx_v_buf; - goto __pyx_L0; - - /* "dataRead.pyx":807 - * return buf.byteswap() * - * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< - * const unsigned short record_id_size, - * const unsigned long long data_block_length): + * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< + * unsigned long long sd_block_length, unsigned long long n_records): + * """ Reads vlsd channel from its SD Block bytes */ /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_AddTraceback("dataRead.unsorted_data_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.sd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_buf); - __Pyx_XDECREF(__pyx_v_VLSD); - __Pyx_XDECREF(__pyx_v_pos_byte_beg); - __Pyx_XDECREF(__pyx_v_pos_byte_end); - __Pyx_XDECREF(__pyx_v_c_format_structure); - __Pyx_XDECREF(__pyx_v_byte_length); - __Pyx_XDECREF(__pyx_v_numpy_format); - __Pyx_XDECREF(__pyx_v_index); - __Pyx_XDECREF(__pyx_v_CGrecordLength); - __Pyx_XDECREF(__pyx_v_VLSD_flag); - __Pyx_XDECREF(__pyx_v_VLSD_CG_name); - __Pyx_XDECREF(__pyx_v_VLSD_CG_signal_data_type); - __Pyx_XDECREF(__pyx_v_channel_name_set); - __Pyx_XDECREF(__pyx_v_record_id); - __Pyx_XDECREF(__pyx_v_Channel); - __Pyx_XDECREF(__pyx_v_name); - __Pyx_XDECREF(__pyx_v_channel_name); + __Pyx_XDECREF(__pyx_v_channel_format); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":911 - * return buf +/* "dataRead.pyx":1099 + * PyMem_Free(VLSDLen) * - * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< - * unsigned short record_id_size, unsigned long long position, - * buf, VLSD, pos_byte_beg, pos_byte_end, c_format_structure, + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__pyx_v_bit_stream, PyObject *__pyx_v_tmp, PyObject *__pyx_v_record_id, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_position, PyObject *__pyx_v_buf, PyObject *__pyx_v_VLSD, PyObject *__pyx_v_pos_byte_beg, PyObject *__pyx_v_pos_byte_end, CYTHON_UNUSED PyObject *__pyx_v_c_format_structure, PyObject *__pyx_v_index, PyObject *__pyx_v_CGrecordLength, PyObject *__pyx_v_VLSD_flag, PyObject *__pyx_v_VLSD_CG_name, PyObject *__pyx_v_VLSD_CG_signal_data_type, PyObject *__pyx_v_channel_name_set) { - unsigned long __pyx_v_VLSDLen; - PyObject *__pyx_v_channel_name = NULL; - PyObject *__pyx_v_signal_data_type = NULL; - PyObject *__pyx_v_temp = NULL; +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const *__pyx_v_bit_stream, unsigned PY_LONG_LONG *__pyx_v_pointer, unsigned long *__pyx_v_VLSDLen, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records) { + PyArrayObject *__pyx_v_output = 0; + unsigned long __pyx_v_rec; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - Py_ssize_t __pyx_t_9; - Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - unsigned PY_LONG_LONG __pyx_t_12; - int __pyx_t_13; + unsigned int __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("unsorted_read4", 1); - - /* "dataRead.pyx":916 - * index, CGrecordLength, VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, - * channel_name_set): - * cdef unsigned long VLSDLen = 0 # <<<<<<<<<<<<<< - * if not VLSD_flag[record_id]: # not VLSD CG) - * for channel_name in channel_name_set[record_id]: # list of channel classes - */ - __pyx_v_VLSDLen = 0; + __Pyx_RefNannySetupContext("equalize_byte_length", 1); - /* "dataRead.pyx":917 - * channel_name_set): - * cdef unsigned long VLSDLen = 0 - * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< - * for channel_name in channel_name_set[record_id]: # list of channel classes - * buf[channel_name][index[record_id]] = \ + /* "dataRead.pyx":1101 + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + * unsigned long max_len, unsigned long long n_records): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< + * cdef unsigned long rec = 0 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_flag, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 917, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 917, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (!__pyx_t_2); - if (__pyx_t_3) { - - /* "dataRead.pyx":918 - * cdef unsigned long VLSDLen = 0 - * if not VLSD_flag[record_id]: # not VLSD CG) - * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< - * buf[channel_name][index[record_id]] = \ - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] - */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_channel_name_set, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 918, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); - __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 918, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 918, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (likely(!__pyx_t_6)) { - if (likely(PyList_CheckExact(__pyx_t_4))) { - { - Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); - #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 918, __pyx_L1_error) - #endif - if (__pyx_t_5 >= __pyx_temp) break; - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 918, __pyx_L1_error) - #else - __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 918, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - } else { - { - Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); - #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 918, __pyx_L1_error) - #endif - if (__pyx_t_5 >= __pyx_temp) break; - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 918, __pyx_L1_error) - #else - __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 918, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - } - } else { - __pyx_t_1 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 918, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_1); - __pyx_t_1 = 0; - - /* "dataRead.pyx":920 - * for channel_name in channel_name_set[record_id]: # list of channel classes - * buf[channel_name][index[record_id]] = \ - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] # <<<<<<<<<<<<<< - * index[record_id] += 1 - * position += CGrecordLength[record_id] - */ - if (unlikely(__pyx_v_tmp == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 920, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 920, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_beg, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 920, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 920, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_3 = (__pyx_t_8 == Py_None); - if (__pyx_t_3) { - __pyx_t_9 = 0; - } else { - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 920, __pyx_L1_error) - __pyx_t_9 = __pyx_t_10; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 920, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_end, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 920, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 920, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_3 = (__pyx_t_1 == Py_None); - if (__pyx_t_3) { - __pyx_t_10 = PY_SSIZE_T_MAX; - } else { - __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 920, __pyx_L1_error) - __pyx_t_10 = __pyx_t_11; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PySequence_GetSlice(__pyx_v_tmp, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 920, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - - /* "dataRead.pyx":919 - * if not VLSD_flag[record_id]: # not VLSD CG) - * for channel_name in channel_name_set[record_id]: # list of channel classes - * buf[channel_name][index[record_id]] = \ # <<<<<<<<<<<<<< - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] - * index[record_id] += 1 - */ - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_buf, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 919, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 919, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_t_8, __pyx_t_1) < 0))) __PYX_ERR(0, 919, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1101, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1101, __pyx_L1_error) + __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":918 - * cdef unsigned long VLSDLen = 0 - * if not VLSD_flag[record_id]: # not VLSD CG) - * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< - * buf[channel_name][index[record_id]] = \ - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + /* "dataRead.pyx":1102 + * unsigned long max_len, unsigned long long n_records): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') */ - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_rec = 0; - /* "dataRead.pyx":921 - * buf[channel_name][index[record_id]] = \ - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] - * index[record_id] += 1 # <<<<<<<<<<<<<< - * position += CGrecordLength[record_id] - * else: # VLSD CG + /* "dataRead.pyx":1103 + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + * cdef unsigned long rec = 0 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< + * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') + * return output */ - __Pyx_INCREF(__pyx_v_record_id); - __pyx_t_4 = __pyx_v_record_id; - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 921, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 921, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely((PyObject_SetItem(__pyx_v_index, __pyx_t_4, __pyx_t_8) < 0))) __PYX_ERR(0, 921, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_9 = __pyx_v_n_records; + for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_9; __pyx_v_rec+=1) { - /* "dataRead.pyx":922 - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] - * index[record_id] += 1 - * position += CGrecordLength[record_id] # <<<<<<<<<<<<<< - * else: # VLSD CG - * position += record_id_size + /* "dataRead.pyx":1104 + * cdef unsigned long rec = 0 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< + * return output + * */ - __pyx_t_4 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 922, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_CGrecordLength, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 922, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 922, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1104, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_12 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_1); if (unlikely((__pyx_t_12 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 922, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_position = __pyx_t_12; - - /* "dataRead.pyx":917 - * channel_name_set): - * cdef unsigned long VLSDLen = 0 - * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< - * for channel_name in channel_name_set[record_id]: # list of channel classes - * buf[channel_name][index[record_id]] = \ - */ - goto __pyx_L3; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_kp_b__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_4, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1104, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - /* "dataRead.pyx":924 - * position += CGrecordLength[record_id] - * else: # VLSD CG - * position += record_id_size # <<<<<<<<<<<<<< - * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length - * position += 4 + /* "dataRead.pyx":1105 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') + * return output # <<<<<<<<<<<<<< + * + * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, */ - /*else*/ { - __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_record_id_size)); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_output); + __pyx_r = ((PyObject *)__pyx_v_output); + goto __pyx_L0; - /* "dataRead.pyx":925 - * else: # VLSD CG - * position += record_id_size - * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length # <<<<<<<<<<<<<< - * position += 4 - * signal_data_type = VLSD_CG_signal_data_type[record_id] + /* "dataRead.pyx":1099 + * PyMem_Free(VLSDLen) + * + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) */ - (void)(memcpy((&__pyx_v_VLSDLen), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); - /* "dataRead.pyx":926 - * position += record_id_size - * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length - * position += 4 # <<<<<<<<<<<<<< - * signal_data_type = VLSD_CG_signal_data_type[record_id] - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + /* 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_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dataRead.equalize_byte_length", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":1107 + * return output + * + * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records, channel_format): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) */ - __pyx_v_position = (__pyx_v_position + 4); - /* "dataRead.pyx":927 - * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length - * position += 4 - * signal_data_type = VLSD_CG_signal_data_type[record_id] # <<<<<<<<<<<<<< - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes - * if signal_data_type == 6: +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char const *__pyx_v_bit_stream, unsigned PY_LONG_LONG *__pyx_v_pointer, unsigned long *__pyx_v_VLSDLen, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records, PyObject *__pyx_v_channel_format) { + PyArrayObject *__pyx_v_output = 0; + unsigned long __pyx_v_rec; + PyObject *__pyx_v_raw = 0; + 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; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + Py_ssize_t __pyx_t_11; + int __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("equalize_string_length", 1); + + /* "dataRead.pyx":1109 + * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + * unsigned long max_len, unsigned long long n_records, channel_format): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< + * cdef unsigned long rec = 0 + * cdef bytes raw */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 927, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_signal_data_type = __pyx_t_1; - __pyx_t_1 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1109, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1109, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1109, __pyx_L1_error) + __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":928 - * position += 4 - * signal_data_type = VLSD_CG_signal_data_type[record_id] - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes # <<<<<<<<<<<<<< - * if signal_data_type == 6: - * temp = temp.decode('ISO8859') + /* "dataRead.pyx":1110 + * unsigned long max_len, unsigned long long n_records, channel_format): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) + * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< + * cdef bytes raw + * if channel_format == 'bom': */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_position, ((__pyx_v_position + __pyx_v_VLSDLen) - 1) - __pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 928, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 928, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_temp = __pyx_t_8; - __pyx_t_8 = 0; + __pyx_v_rec = 0; - /* "dataRead.pyx":929 - * signal_data_type = VLSD_CG_signal_data_type[record_id] - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: + /* "dataRead.pyx":1112 + * cdef unsigned long rec = 0 + * cdef bytes raw + * if channel_format == 'bom': # <<<<<<<<<<<<<< + * # signal_data_type 17: detect BOM per value + * for rec from 0 <= rec < n_records by 1: + */ + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_channel_format, __pyx_n_u_bom, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1112, __pyx_L1_error) + if (__pyx_t_9) { + + /* "dataRead.pyx":1114 + * if channel_format == 'bom': + * # signal_data_type 17: detect BOM per value + * for rec from 0 <= rec < n_records by 1: # <<<<<<<<<<<<<< + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + */ + __pyx_t_10 = __pyx_v_n_records; + for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_10; __pyx_v_rec+=1) { + + /* "dataRead.pyx":1115 + * # signal_data_type 17: detect BOM per value + * for rec from 0 <= rec < n_records by 1: + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) # <<<<<<<<<<<<<< + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1115, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1115, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_raw, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "dataRead.pyx":1116 + * for rec from 0 <= rec < n_records by 1: + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_6, 6, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 929, __pyx_L1_error) - if (__pyx_t_3) { + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1116, __pyx_L1_error) + __pyx_t_12 = (__pyx_t_11 >= 3); + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1116, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __pyx_t_12; + __pyx_L7_bool_binop_done:; + if (__pyx_t_9) { - /* "dataRead.pyx":930 - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes - * if signal_data_type == 6: - * temp = temp.decode('ISO8859') # <<<<<<<<<<<<<< - * elif signal_data_type == 7: - * temp = temp.decode('utf-8') + /* "dataRead.pyx":1117 + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 930, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1117, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1117, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":929 - * signal_data_type = VLSD_CG_signal_data_type[record_id] - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: + /* "dataRead.pyx":1116 + * for rec from 0 <= rec < n_records by 1: + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: */ - goto __pyx_L7; - } + goto __pyx_L6; + } - /* "dataRead.pyx":931 - * if signal_data_type == 6: - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: # <<<<<<<<<<<<<< - * temp = temp.decode('utf-8') - * elif signal_data_type == 8: + /* "dataRead.pyx":1118 + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_7, 7, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 931, __pyx_L1_error) - if (__pyx_t_3) { + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1118, __pyx_L1_error) + __pyx_t_12 = (__pyx_t_11 >= 2); + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1118, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1118, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __pyx_t_12; + __pyx_L11_bool_binop_done:; + if (__pyx_t_9) { - /* "dataRead.pyx":932 - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: - * temp = temp.decode('utf-8') # <<<<<<<<<<<<<< - * elif signal_data_type == 8: - * temp = temp.decode('= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 932, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1119, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1119, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":931 - * if signal_data_type == 6: - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: # <<<<<<<<<<<<<< - * temp = temp.decode('utf-8') - * elif signal_data_type == 8: + /* "dataRead.pyx":1118 + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: */ - goto __pyx_L7; - } + goto __pyx_L6; + } - /* "dataRead.pyx":933 - * elif signal_data_type == 7: - * temp = temp.decode('utf-8') - * elif signal_data_type == 8: # <<<<<<<<<<<<<< - * temp = temp.decode('= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_8, 8, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 933, __pyx_L1_error) - if (__pyx_t_3) { + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1120, __pyx_L1_error) + __pyx_t_12 = (__pyx_t_11 >= 2); + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1120, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1120, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1120, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __pyx_t_12; + __pyx_L14_bool_binop_done:; + if (__pyx_t_9) { - /* "dataRead.pyx":934 - * temp = temp.decode('utf-8') - * elif signal_data_type == 8: - * temp = temp.decode('utf-16') + /* "dataRead.pyx":1121 + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) > 0: + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 934, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1121, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1121, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1121, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":933 - * elif signal_data_type == 7: - * temp = temp.decode('utf-8') - * elif signal_data_type == 8: # <<<<<<<<<<<<<< - * temp = temp.decode('= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: */ - goto __pyx_L7; - } + goto __pyx_L6; + } - /* "dataRead.pyx":935 - * elif signal_data_type == 8: - * temp = temp.decode('utf-16') - * VLSD[VLSD_CG_name[record_id]].append(temp) + /* "dataRead.pyx":1122 + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: # <<<<<<<<<<<<<< + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + * else: */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_9, 9, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 935, __pyx_L1_error) - if (__pyx_t_3) { + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1122, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_11 > 0); + if (__pyx_t_9) { - /* "dataRead.pyx":936 - * temp = temp.decode('utf-16') # <<<<<<<<<<<<<< - * VLSD[VLSD_CG_name[record_id]].append(temp) - * position += VLSDLen + /* "dataRead.pyx":1123 + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * else: + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 936, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1123, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1123, __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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(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_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1123, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":935 - * elif signal_data_type == 8: - * temp = temp.decode('utf-16') - * VLSD[VLSD_CG_name[record_id]].append(temp) + /* "dataRead.pyx":1122 + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: # <<<<<<<<<<<<<< + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + * else: */ + } + __pyx_L6:; } - __pyx_L7:; - /* "dataRead.pyx":937 - * elif signal_data_type == 9: - * temp = temp.decode('>utf-16') - * VLSD[VLSD_CG_name[record_id]].append(temp) # <<<<<<<<<<<<<< - * position += VLSDLen - * return position, buf, VLSD, index + /* "dataRead.pyx":1112 + * cdef unsigned long rec = 0 + * cdef bytes raw + * if channel_format == 'bom': # <<<<<<<<<<<<<< + * # signal_data_type 17: detect BOM per value + * for rec from 0 <= rec < n_records by 1: */ - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 937, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 937, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_13 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_temp); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 937, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + goto __pyx_L3; + } - /* "dataRead.pyx":938 - * temp = temp.decode('>utf-16') - * VLSD[VLSD_CG_name[record_id]].append(temp) - * position += VLSDLen # <<<<<<<<<<<<<< - * return position, buf, VLSD, index + /* "dataRead.pyx":1125 + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + * else: + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< + * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') + * return output + */ + /*else*/ { + __pyx_t_10 = __pyx_v_n_records; + for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_10; __pyx_v_rec+=1) { + + /* "dataRead.pyx":1126 + * else: + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') # <<<<<<<<<<<<<< + * return output * */ - __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_VLSDLen)); + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_channel_format}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1126, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } } __pyx_L3:; - /* "dataRead.pyx":939 - * VLSD[VLSD_CG_name[record_id]].append(temp) - * position += VLSDLen - * return position, buf, VLSD, index # <<<<<<<<<<<<<< + /* "dataRead.pyx":1127 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') + * return output # <<<<<<<<<<<<<< * * */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 939, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 939, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1)) __PYX_ERR(0, 939, __pyx_L1_error); - __Pyx_INCREF(__pyx_v_buf); - __Pyx_GIVEREF(__pyx_v_buf); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_buf)) __PYX_ERR(0, 939, __pyx_L1_error); - __Pyx_INCREF(__pyx_v_VLSD); - __Pyx_GIVEREF(__pyx_v_VLSD); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_VLSD)) __PYX_ERR(0, 939, __pyx_L1_error); - __Pyx_INCREF(__pyx_v_index); - __Pyx_GIVEREF(__pyx_v_index); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_index)) __PYX_ERR(0, 939, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; + __Pyx_INCREF((PyObject *)__pyx_v_output); + __pyx_r = ((PyObject *)__pyx_v_output); goto __pyx_L0; - /* "dataRead.pyx":911 - * return buf + /* "dataRead.pyx":1107 + * return output * - * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< - * unsigned short record_id_size, unsigned long long position, - * buf, VLSD, pos_byte_beg, pos_byte_end, c_format_structure, + * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records, channel_format): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) */ /* 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_5); + __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("dataRead.unsorted_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.equalize_string_length", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_channel_name); - __Pyx_XDECREF(__pyx_v_signal_data_type); - __Pyx_XDECREF(__pyx_v_temp); + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XDECREF(__pyx_v_raw); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":942 +/* "dataRead.pyx":1130 * * - * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< - * unsigned long long sd_block_length, unsigned long long n_records): - * """ Reads vlsd channel from its SD Block bytes + * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< + * object offsets_array, object sizes_array, + * unsigned long long n_records): */ /* Python wrapper */ -static PyObject *__pyx_pw_8dataRead_5sd_data_read(PyObject *__pyx_self, +static PyObject *__pyx_pw_8dataRead_7vd_data_read(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else PyObject *__pyx_args, PyObject *__pyx_kwds #endif ); /*proto*/ -PyDoc_STRVAR(__pyx_doc_8dataRead_4sd_data_read, " Reads vlsd channel from its SD Block bytes\n\n Parameters\n ----------------\n signal_data_type : int\n\n sd_block : bytes\n SD Block bytes\n\n sd_block_length: int\n SD Block data length (header not included)\n\n n_records: int\n number of records\n\n Returns\n -----------\n array\n "); -static PyMethodDef __pyx_mdef_8dataRead_5sd_data_read = {"sd_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_5sd_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_4sd_data_read}; -static PyObject *__pyx_pw_8dataRead_5sd_data_read(PyObject *__pyx_self, +PyDoc_STRVAR(__pyx_doc_8dataRead_6vd_data_read, "Read VLSC channel data from raw VD block bytes.\n\n Parameters\n ----------------\n signal_data_type : int\n signal data type (6=ISO-8859-1, 7=UTF-8, 8=UTF-16-LE, 9=UTF-16-BE,\n 17=BOM, 10+=byte array)\n vd_block : bytes\n raw VD block data (no per-value length prefix, unlike SD blocks)\n offsets_array : numpy uint64 array\n byte offset of each value within vd_block\n sizes_array : numpy uint64 array\n byte size of each value\n n_records : int\n number of records\n\n Returns\n -------\n numpy array of decoded strings (dtype U...) or byte arrays (dtype V...)\n "); +static PyMethodDef __pyx_mdef_8dataRead_7vd_data_read = {"vd_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_7vd_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_6vd_data_read}; +static PyObject *__pyx_pw_8dataRead_7vd_data_read(PyObject *__pyx_self, #if CYTHON_METH_FASTCALL PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds #else @@ -32447,20 +36380,21 @@ PyObject *__pyx_args, PyObject *__pyx_kwds #endif ) { unsigned short __pyx_v_signal_data_type; - PyObject *__pyx_v_sd_block = 0; - CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length; + PyObject *__pyx_v_vd_block = 0; + PyObject *__pyx_v_offsets_array = 0; + PyObject *__pyx_v_sizes_array = 0; unsigned PY_LONG_LONG __pyx_v_n_records; #if !CYTHON_METH_FASTCALL CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[4] = {0,0,0,0}; + PyObject* values[5] = {0,0,0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; PyObject *__pyx_r = 0; __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("sd_data_read (wrapper)", 0); + __Pyx_RefNannySetupContext("vd_data_read (wrapper)", 0); #if !CYTHON_METH_FASTCALL #if CYTHON_ASSUME_SAFE_MACROS __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); @@ -32470,10 +36404,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds #endif __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signal_data_type,&__pyx_n_s_sd_block,&__pyx_n_s_sd_block_length,&__pyx_n_s_n_records,0}; + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signal_data_type,&__pyx_n_s_vd_block,&__pyx_n_s_offsets_array,&__pyx_n_s_sizes_array,&__pyx_n_s_n_records,0}; if (__pyx_kwds) { Py_ssize_t kw_args; switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); CYTHON_FALLTHROUGH; case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); @@ -32492,59 +36428,71 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 942, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sd_block)) != 0)) { + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_vd_block)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 942, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 1); __PYX_ERR(0, 942, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 1); __PYX_ERR(0, 1130, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sd_block_length)) != 0)) { + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_offsets_array)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 942, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 2); __PYX_ERR(0, 942, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 2); __PYX_ERR(0, 1130, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: - if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_records)) != 0)) { + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sizes_array)) != 0)) { (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 942, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 3); __PYX_ERR(0, 1130, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_records)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 3); __PYX_ERR(0, 942, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 4); __PYX_ERR(0, 1130, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sd_data_read") < 0)) __PYX_ERR(0, 942, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "vd_data_read") < 0)) __PYX_ERR(0, 1130, __pyx_L3_error) } - } else if (unlikely(__pyx_nargs != 4)) { + } else if (unlikely(__pyx_nargs != 5)) { goto __pyx_L5_argtuple_error; } else { values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); } - __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 942, __pyx_L3_error) - __pyx_v_sd_block = ((PyObject*)values[1]); - __pyx_v_sd_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_sd_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 943, __pyx_L3_error) - __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[3]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 943, __pyx_L3_error) + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) + __pyx_v_vd_block = ((PyObject*)values[1]); + __pyx_v_offsets_array = values[2]; + __pyx_v_sizes_array = values[3]; + __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1132, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 942, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1130, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -32554,12 +36502,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } } - __Pyx_AddTraceback("dataRead.sd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.vd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sd_block), (&PyBytes_Type), 1, "sd_block", 1))) __PYX_ERR(0, 942, __pyx_L1_error) - __pyx_r = __pyx_pf_8dataRead_4sd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_sd_block, __pyx_v_sd_block_length, __pyx_v_n_records); + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vd_block), (&PyBytes_Type), 1, "vd_block", 1))) __PYX_ERR(0, 1130, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_6vd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_vd_block, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_n_records); /* function exit code */ goto __pyx_L0; @@ -32576,574 +36524,1244 @@ PyObject *__pyx_args, PyObject *__pyx_kwds return __pyx_r; } -static PyObject *__pyx_pf_8dataRead_4sd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_sd_block, CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length, unsigned PY_LONG_LONG __pyx_v_n_records) { +static PyObject *__pyx_pf_8dataRead_6vd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_vd_block, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned PY_LONG_LONG __pyx_v_n_records) { char const *__pyx_v_bit_stream; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned PY_LONG_LONG __pyx_v_size; unsigned long __pyx_v_max_len; - unsigned long __pyx_v_vlsd_len; - unsigned long *__pyx_v_VLSDLen; - unsigned PY_LONG_LONG *__pyx_v_pointer; - unsigned PY_LONG_LONG __pyx_v_rec; - PyObject *__pyx_v_channel_format = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations char *__pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; + unsigned PY_LONG_LONG __pyx_t_2; + unsigned PY_LONG_LONG __pyx_t_3; unsigned PY_LONG_LONG __pyx_t_4; PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_6; int __pyx_t_7; - char const *__pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; + int __pyx_t_8; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("sd_data_read", 1); + __Pyx_RefNannySetupContext("vd_data_read", 1); - /* "dataRead.pyx":963 - * array + /* "dataRead.pyx":1153 + * numpy array of decoded strings (dtype U...) or byte arrays (dtype V...) * """ - * cdef const char* bit_stream = PyBytes_AsString(sd_block) # <<<<<<<<<<<<<< - * cdef unsigned long max_len = 0 - * cdef unsigned long vlsd_len = 0 + * cdef const char* bit_stream = PyBytes_AsString(vd_block) # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long long offset, size */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_sd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 963, __pyx_L1_error) + __pyx_t_1 = PyBytes_AsString(__pyx_v_vd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1153, __pyx_L1_error) __pyx_v_bit_stream = __pyx_t_1; - /* "dataRead.pyx":964 - * """ - * cdef const char* bit_stream = PyBytes_AsString(sd_block) + /* "dataRead.pyx":1156 + * cdef unsigned long long i + * cdef unsigned long long offset, size * cdef unsigned long max_len = 0 # <<<<<<<<<<<<<< - * cdef unsigned long vlsd_len = 0 - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + * + * # Find max_len from sizes */ __pyx_v_max_len = 0; - /* "dataRead.pyx":965 - * cdef const char* bit_stream = PyBytes_AsString(sd_block) - * cdef unsigned long max_len = 0 - * cdef unsigned long vlsd_len = 0 # <<<<<<<<<<<<<< - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + /* "dataRead.pyx":1159 + * + * # Find max_len from sizes + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > max_len: */ - __pyx_v_vlsd_len = 0; + __pyx_t_2 = __pyx_v_n_records; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; - /* "dataRead.pyx":966 - * cdef unsigned long max_len = 0 - * cdef unsigned long vlsd_len = 0 - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) # <<<<<<<<<<<<<< - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) - * cdef unsigned long long rec = 0 + /* "dataRead.pyx":1160 + * # Find max_len from sizes + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > max_len: + * max_len = size */ - __pyx_v_VLSDLen = ((unsigned long *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned long))))); + __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1160, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_5); if (unlikely((__pyx_t_6 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1160, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_size = ((unsigned PY_LONG_LONG)__pyx_t_6); - /* "dataRead.pyx":967 - * cdef unsigned long vlsd_len = 0 - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) # <<<<<<<<<<<<<< - * cdef unsigned long long rec = 0 - * if not VLSDLen or not pointer: + /* "dataRead.pyx":1161 + * for i in range(n_records): + * size = sizes_array[i] + * if size > max_len: # <<<<<<<<<<<<<< + * max_len = size + * */ - __pyx_v_pointer = ((unsigned PY_LONG_LONG *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned PY_LONG_LONG))))); + __pyx_t_7 = (__pyx_v_size > __pyx_v_max_len); + if (__pyx_t_7) { - /* "dataRead.pyx":968 - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) - * cdef unsigned long long rec = 0 # <<<<<<<<<<<<<< - * if not VLSDLen or not pointer: - * raise MemoryError() + /* "dataRead.pyx":1162 + * size = sizes_array[i] + * if size > max_len: + * max_len = size # <<<<<<<<<<<<<< + * + * if max_len == 0: */ - __pyx_v_rec = 0; + __pyx_v_max_len = ((unsigned long)__pyx_v_size); - /* "dataRead.pyx":969 - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) - * cdef unsigned long long rec = 0 - * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< - * raise MemoryError() - * try: + /* "dataRead.pyx":1161 + * for i in range(n_records): + * size = sizes_array[i] + * if size > max_len: # <<<<<<<<<<<<<< + * max_len = size + * */ - __pyx_t_3 = (!(__pyx_v_VLSDLen != 0)); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L4_bool_binop_done; + } } - __pyx_t_3 = (!(__pyx_v_pointer != 0)); - __pyx_t_2 = __pyx_t_3; - __pyx_L4_bool_binop_done:; - if (unlikely(__pyx_t_2)) { - /* "dataRead.pyx":970 - * cdef unsigned long long rec = 0 - * if not VLSDLen or not pointer: - * raise MemoryError() # <<<<<<<<<<<<<< - * try: - * pointer[0] = 0 + /* "dataRead.pyx":1164 + * max_len = size + * + * if max_len == 0: # <<<<<<<<<<<<<< + * return None + * */ - PyErr_NoMemory(); __PYX_ERR(0, 970, __pyx_L1_error) + __pyx_t_7 = (__pyx_v_max_len == 0); + if (__pyx_t_7) { - /* "dataRead.pyx":969 - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) - * cdef unsigned long long rec = 0 - * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< - * raise MemoryError() - * try: + /* "dataRead.pyx":1165 + * + * if max_len == 0: + * return None # <<<<<<<<<<<<<< + * + * if signal_data_type < 10 or signal_data_type == 17: */ - } + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "dataRead.pyx":971 - * if not VLSDLen or not pointer: - * raise MemoryError() - * try: # <<<<<<<<<<<<<< - * pointer[0] = 0 - * VLSDLen[0] = 0 + /* "dataRead.pyx":1164 + * max_len = size + * + * if max_len == 0: # <<<<<<<<<<<<<< + * return None + * */ - /*try:*/ { + } - /* "dataRead.pyx":972 - * raise MemoryError() - * try: - * pointer[0] = 0 # <<<<<<<<<<<<<< - * VLSDLen[0] = 0 - * for rec from 0 <= rec < n_records - 1 by 1: + /* "dataRead.pyx":1167 + * return None + * + * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< + * return vd_equalize_string(bit_stream, offsets_array, sizes_array, + * max_len, n_records, signal_data_type) */ - (__pyx_v_pointer[0]) = 0; + __pyx_t_8 = (__pyx_v_signal_data_type < 10); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_8 = (__pyx_v_signal_data_type == 17); + __pyx_t_7 = __pyx_t_8; + __pyx_L8_bool_binop_done:; + if (__pyx_t_7) { - /* "dataRead.pyx":973 - * try: - * pointer[0] = 0 - * VLSDLen[0] = 0 # <<<<<<<<<<<<<< - * for rec from 0 <= rec < n_records - 1 by 1: - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + /* "dataRead.pyx":1168 + * + * if signal_data_type < 10 or signal_data_type == 17: + * return vd_equalize_string(bit_stream, offsets_array, sizes_array, # <<<<<<<<<<<<<< + * max_len, n_records, signal_data_type) + * else: */ - (__pyx_v_VLSDLen[0]) = 0; + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":974 - * pointer[0] = 0 - * VLSDLen[0] = 0 - * for rec from 0 <= rec < n_records - 1 by 1: # <<<<<<<<<<<<<< - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len + /* "dataRead.pyx":1169 + * if signal_data_type < 10 or signal_data_type == 17: + * return vd_equalize_string(bit_stream, offsets_array, sizes_array, + * max_len, n_records, signal_data_type) # <<<<<<<<<<<<<< + * else: + * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, */ - __pyx_t_4 = (__pyx_v_n_records - 1); - for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_4; __pyx_v_rec+=1) { + __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_string(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records, __pyx_v_signal_data_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; - /* "dataRead.pyx":975 - * VLSDLen[0] = 0 - * for rec from 0 <= rec < n_records - 1 by 1: - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< - * VLSDLen[rec] = vlsd_len - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + /* "dataRead.pyx":1167 + * return None + * + * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< + * return vd_equalize_string(bit_stream, offsets_array, sizes_array, + * max_len, n_records, signal_data_type) */ - (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); + } - /* "dataRead.pyx":976 - * for rec from 0 <= rec < n_records - 1 by 1: - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] - * if VLSDLen[rec] > max_len: + /* "dataRead.pyx":1171 + * max_len, n_records, signal_data_type) + * else: + * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, # <<<<<<<<<<<<<< + * max_len, n_records) + * */ - (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":977 - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] # <<<<<<<<<<<<<< - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] + /* "dataRead.pyx":1172 + * else: + * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, + * max_len, n_records) # <<<<<<<<<<<<<< + * + * */ - (__pyx_v_pointer[(__pyx_v_rec + 1)]) = (((__pyx_v_VLSDLen[__pyx_v_rec]) + 4) + (__pyx_v_pointer[__pyx_v_rec])); + __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_bytes(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":978 - * VLSDLen[rec] = vlsd_len - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] - * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< - * max_len = VLSDLen[rec] - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + /* "dataRead.pyx":1130 + * + * + * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< + * object offsets_array, object sizes_array, + * unsigned long long n_records): */ - __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); - if (__pyx_t_2) { - /* "dataRead.pyx":979 - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len - */ - __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("dataRead.vd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":978 - * VLSDLen[rec] = vlsd_len - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] - * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< - * max_len = VLSDLen[rec] - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) +/* "dataRead.pyx":1175 + * + * + * cdef inline vd_equalize_string(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records, + * unsigned short signal_data_type): */ - } - } - /* "dataRead.pyx":980 - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< - * VLSDLen[rec] = vlsd_len - * if VLSDLen[rec] > max_len: - */ - (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const *__pyx_v_bit_stream, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records, unsigned short __pyx_v_signal_data_type) { + PyArrayObject *__pyx_v_output = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned PY_LONG_LONG __pyx_v_offset; + unsigned long __pyx_v_size; + PyObject *__pyx_v_raw = 0; + 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; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned PY_LONG_LONG __pyx_t_11; + unsigned long __pyx_t_12; + int __pyx_t_13; + unsigned PY_LONG_LONG __pyx_t_14; + int __pyx_t_15; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("vd_equalize_string", 1); - /* "dataRead.pyx":981 - * max_len = VLSDLen[rec] - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] + /* "dataRead.pyx":1179 + * unsigned short signal_data_type): + * """Decode string values from VD block using offset/size pairs.""" + * cdef np.ndarray output = np.zeros((n_records,), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long long offset */ - (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1179, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1179, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1179, __pyx_L1_error) + __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":982 - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len - * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< - * max_len = VLSDLen[rec] - * if max_len != 0: - */ - __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); - if (__pyx_t_2) { + /* "dataRead.pyx":1184 + * cdef unsigned long size + * cdef bytes raw + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] + */ + switch (__pyx_v_signal_data_type) { + case 6: + + /* "dataRead.pyx":1185 + * cdef bytes raw + * if signal_data_type == 6: + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1186 + * if signal_data_type == 6: + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1186, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1186, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1187 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1188 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + * elif signal_data_type == 7: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1188, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1188, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":983 - * VLSDLen[rec] = vlsd_len - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< - * if max_len != 0: - * if signal_data_type < 10: + /* "dataRead.pyx":1189 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 7: + * for i in range(n_records): */ - __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1189, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__17, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":982 - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len - * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< - * max_len = VLSDLen[rec] - * if max_len != 0: + /* "dataRead.pyx":1187 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') */ + } } - /* "dataRead.pyx":984 - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] - * if max_len != 0: # <<<<<<<<<<<<<< - * if signal_data_type < 10: - * if signal_data_type == 6: - */ - __pyx_t_2 = (__pyx_v_max_len != 0); - if (__pyx_t_2) { - - /* "dataRead.pyx":985 - * max_len = VLSDLen[rec] - * if max_len != 0: - * if signal_data_type < 10: # <<<<<<<<<<<<<< - * if signal_data_type == 6: - * channel_format = 'ISO8859' - */ - __pyx_t_2 = (__pyx_v_signal_data_type < 10); - if (__pyx_t_2) { - - /* "dataRead.pyx":986 - * if max_len != 0: - * if signal_data_type < 10: - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * channel_format = 'ISO8859' - * elif signal_data_type == 7: + /* "dataRead.pyx":1184 + * cdef unsigned long size + * cdef bytes raw + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] */ - switch (__pyx_v_signal_data_type) { - case 6: + break; + case 7: + + /* "dataRead.pyx":1191 + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + * elif signal_data_type == 7: + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1192 + * elif signal_data_type == 7: + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1192, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1192, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1193 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1194 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + * elif signal_data_type == 8: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1194, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1194, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":987 - * if signal_data_type < 10: - * if signal_data_type == 6: - * channel_format = 'ISO8859' # <<<<<<<<<<<<<< - * elif signal_data_type == 7: - * channel_format = 'utf-8' + /* "dataRead.pyx":1195 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 8: + * for i in range(n_records): */ - __Pyx_INCREF(__pyx_n_u_ISO8859); - __pyx_v_channel_format = __pyx_n_u_ISO8859; + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1195, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__14, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1195, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":986 - * if max_len != 0: - * if signal_data_type < 10: - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * channel_format = 'ISO8859' - * elif signal_data_type == 7: + /* "dataRead.pyx":1193 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') */ - break; - case 7: + } + } - /* "dataRead.pyx":989 - * channel_format = 'ISO8859' - * elif signal_data_type == 7: - * channel_format = 'utf-8' # <<<<<<<<<<<<<< - * elif signal_data_type == 8: - * channel_format = ' offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + * elif signal_data_type == 7: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] */ - __Pyx_INCREF(__pyx_kp_u_utf_8); - __pyx_v_channel_format = __pyx_kp_u_utf_8; + break; + case 8: + + /* "dataRead.pyx":1197 + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + * elif signal_data_type == 8: + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1198 + * elif signal_data_type == 8: + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1198, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1198, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1199 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1200 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif signal_data_type == 9: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1200, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1200, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":988 - * if signal_data_type == 6: - * channel_format = 'ISO8859' - * elif signal_data_type == 7: # <<<<<<<<<<<<<< - * channel_format = 'utf-8' - * elif signal_data_type == 8: + /* "dataRead.pyx":1201 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 9: + * for i in range(n_records): */ - break; - case 8: + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1201, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__15, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1201, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1201, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":991 - * channel_format = 'utf-8' - * elif signal_data_type == 8: - * channel_format = ' sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') */ - __Pyx_INCREF(__pyx_kp_u_utf_16); - __pyx_v_channel_format = __pyx_kp_u_utf_16; + } + } - /* "dataRead.pyx":990 - * elif signal_data_type == 7: - * channel_format = 'utf-8' - * elif signal_data_type == 8: # <<<<<<<<<<<<<< - * channel_format = ' offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + * elif signal_data_type == 8: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] */ - break; - case 9: + break; + case 9: + + /* "dataRead.pyx":1203 + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif signal_data_type == 9: + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1204 + * elif signal_data_type == 9: + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1204, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1205 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1206 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif signal_data_type == 17: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1206, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1206, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":993 - * channel_format = ' 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 17: + * # BOM-per-value: detect encoding from BOM bytes */ - __Pyx_INCREF(__pyx_kp_u_utf_16_2); - __pyx_v_channel_format = __pyx_kp_u_utf_16_2; + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1207, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__16, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1207, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":992 - * elif signal_data_type == 8: - * channel_format = ' sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') */ - break; - default: - - /* "dataRead.pyx":995 - * channel_format = '>utf-16' - * else: - * channel_format = 'utf-8' # <<<<<<<<<<<<<< - * printf('signal_data_type should have fixed length') - * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) + } + } + + /* "dataRead.pyx":1202 + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif signal_data_type == 9: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] */ - __Pyx_INCREF(__pyx_kp_u_utf_8); - __pyx_v_channel_format = __pyx_kp_u_utf_8; + break; + case 17: + + /* "dataRead.pyx":1210 + * elif signal_data_type == 17: + * # BOM-per-value: detect encoding from BOM bytes + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1211 + * # BOM-per-value: detect encoding from BOM bytes + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1211, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1212 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1213 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * raw = bytes(bit_stream[offset:offset+size]) + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1213, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1213, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":996 - * else: - * channel_format = 'utf-8' - * printf('signal_data_type should have fixed length') # <<<<<<<<<<<<<< - * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) - * else: # byte arrays or mime types + /* "dataRead.pyx":1214 + * if size > 0: + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) # <<<<<<<<<<<<<< + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') */ - (void)(printf(((char const *)"signal_data_type should have fixed length"))); - break; + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1214, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_raw, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "dataRead.pyx":1215 + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + */ + __pyx_t_15 = (__pyx_v_size >= 3); + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L19_bool_binop_done; } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1215, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_t_15; + __pyx_L19_bool_binop_done:; + if (__pyx_t_13) { + + /* "dataRead.pyx":1216 + * raw = bytes(bit_stream[offset:offset+size]) + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1216, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1216, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1216, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":997 - * channel_format = 'utf-8' - * printf('signal_data_type should have fixed length') - * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) # <<<<<<<<<<<<<< - * else: # byte arrays or mime types - * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) + /* "dataRead.pyx":1215 + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __pyx_f_8dataRead_equalize_string_length(__pyx_v_bit_stream, __pyx_v_pointer, __pyx_v_VLSDLen, __pyx_v_max_len, __pyx_v_n_records, __pyx_v_channel_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 997, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L6_return; + goto __pyx_L18; + } - /* "dataRead.pyx":985 - * max_len = VLSDLen[rec] - * if max_len != 0: - * if signal_data_type < 10: # <<<<<<<<<<<<<< - * if signal_data_type == 6: - * channel_format = 'ISO8859' + /* "dataRead.pyx":1217 + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: */ - } + __pyx_t_15 = (__pyx_v_size >= 2); + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L23_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1217, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L23_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1217, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1217, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_t_15; + __pyx_L23_bool_binop_done:; + if (__pyx_t_13) { + + /* "dataRead.pyx":1218 + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1218, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1218, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":999 - * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) - * else: # byte arrays or mime types - * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) # <<<<<<<<<<<<<< - * else: - * printf('VLSD channel could not be properly read\n') + /* "dataRead.pyx":1217 + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __pyx_f_8dataRead_equalize_byte_length(__pyx_v_bit_stream, __pyx_v_pointer, __pyx_v_VLSDLen, __pyx_v_max_len, __pyx_v_n_records); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 999, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L6_return; - } + goto __pyx_L18; + } - /* "dataRead.pyx":984 - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] - * if max_len != 0: # <<<<<<<<<<<<<< - * if signal_data_type < 10: - * if signal_data_type == 6: + /* "dataRead.pyx":1219 + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * else: */ - } - - /* "dataRead.pyx":1001 - * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) - * else: - * printf('VLSD channel could not be properly read\n') # <<<<<<<<<<<<<< - * return None - * finally: + __pyx_t_15 = (__pyx_v_size >= 2); + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L26_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1219, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L26_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1219, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1219, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_t_15; + __pyx_L26_bool_binop_done:; + if (__pyx_t_13) { + + /* "dataRead.pyx":1220 + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * else: + * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') */ - /*else*/ { - (void)(printf(((char const *)"VLSD channel could not be properly read\n"))); - - /* "dataRead.pyx":1002 - * else: - * printf('VLSD channel could not be properly read\n') - * return None # <<<<<<<<<<<<<< - * finally: - * PyMem_Free(pointer) + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1220, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1220, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1220, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1220, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dataRead.pyx":1219 + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * else: */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L6_return; - } - } + goto __pyx_L18; + } - /* "dataRead.pyx":1004 - * return None - * finally: - * PyMem_Free(pointer) # <<<<<<<<<<<<<< - * PyMem_Free(VLSDLen) + /* "dataRead.pyx":1222 + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * else: + * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * return output * */ - /*finally:*/ { - __pyx_L7_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename; - { - PyMem_Free(__pyx_v_pointer); + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1222, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1222, __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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(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_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1222, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L18:; - /* "dataRead.pyx":1005 - * finally: - * PyMem_Free(pointer) - * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< - * - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + /* "dataRead.pyx":1212 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) */ - PyMem_Free(__pyx_v_VLSDLen); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); } - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11); - __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; - __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8; - goto __pyx_L1_error; } - __pyx_L6_return: { - __pyx_t_14 = __pyx_r; - __pyx_r = 0; - /* "dataRead.pyx":1004 - * return None - * finally: - * PyMem_Free(pointer) # <<<<<<<<<<<<<< - * PyMem_Free(VLSDLen) - * + /* "dataRead.pyx":1208 + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif signal_data_type == 17: # <<<<<<<<<<<<<< + * # BOM-per-value: detect encoding from BOM bytes + * for i in range(n_records): */ - PyMem_Free(__pyx_v_pointer); + break; + default: break; + } - /* "dataRead.pyx":1005 - * finally: - * PyMem_Free(pointer) - * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< + /* "dataRead.pyx":1223 + * else: + * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') + * return output # <<<<<<<<<<<<<< + * * - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, */ - PyMem_Free(__pyx_v_VLSDLen); - __pyx_r = __pyx_t_14; - __pyx_t_14 = 0; - goto __pyx_L0; - } - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_output); + __pyx_r = ((PyObject *)__pyx_v_output); + goto __pyx_L0; - /* "dataRead.pyx":942 + /* "dataRead.pyx":1175 * * - * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< - * unsigned long long sd_block_length, unsigned long long n_records): - * """ Reads vlsd channel from its SD Block bytes + * cdef inline vd_equalize_string(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records, + * unsigned short signal_data_type): */ /* 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_5); - __Pyx_AddTraceback("dataRead.sd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dataRead.vd_equalize_string", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_channel_format); + __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XDECREF(__pyx_v_raw); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":1007 - * PyMem_Free(VLSDLen) +/* "dataRead.pyx":1226 * - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + * + * cdef inline vd_equalize_bytes(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records): + * """Return byte-array values from VD block using offset/size pairs.""" */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const *__pyx_v_bit_stream, unsigned PY_LONG_LONG *__pyx_v_pointer, unsigned long *__pyx_v_VLSDLen, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *__pyx_v_bit_stream, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records) { PyArrayObject *__pyx_v_output = 0; - unsigned long __pyx_v_rec; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned PY_LONG_LONG __pyx_v_offset; + unsigned long __pyx_v_size; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; @@ -33155,40 +37773,45 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const PyObject *__pyx_t_7 = NULL; unsigned int __pyx_t_8; unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned PY_LONG_LONG __pyx_t_11; + unsigned long __pyx_t_12; + int __pyx_t_13; + unsigned PY_LONG_LONG __pyx_t_14; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("equalize_byte_length", 1); + __Pyx_RefNannySetupContext("vd_equalize_bytes", 1); - /* "dataRead.pyx":1009 - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, - * unsigned long max_len, unsigned long long n_records): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + /* "dataRead.pyx":1229 + * unsigned long max_len, unsigned long long n_records): + * """Return byte-array values from VD block using offset/size pairs.""" + * cdef np.ndarray output = np.zeros((n_records,), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long long offset */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1009, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1009, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1009, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1009, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1009, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1009, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1009, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1009, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1009, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1009, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1229, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = NULL; __pyx_t_8 = 0; @@ -33199,339 +37822,807 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_7); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1229, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1229, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1229, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1229, __pyx_L1_error) + __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "dataRead.pyx":1233 + * cdef unsigned long long offset + * cdef unsigned long size + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1234 + * cdef unsigned long size + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1234, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1234, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1235 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1236 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + * return output + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1236, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1236, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + + /* "dataRead.pyx":1237 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< + * return output + */ + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_kp_b__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1237, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1235 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + */ + } + } + + /* "dataRead.pyx":1238 + * offset = offsets_array[i] + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + * return output # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_output); + __pyx_r = ((PyObject *)__pyx_v_output); + goto __pyx_L0; + + /* "dataRead.pyx":1226 + * + * + * cdef inline vd_equalize_bytes(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records): + * """Return byte-array values from VD block using offset/size pairs.""" + */ + + /* 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_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dataRead.vd_equalize_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_9__pyx_unpickle_SymBufReader(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8dataRead_9__pyx_unpickle_SymBufReader = {"__pyx_unpickle_SymBufReader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_9__pyx_unpickle_SymBufReader, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8dataRead_9__pyx_unpickle_SymBufReader(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_SymBufReader") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.__pyx_unpickle_SymBufReader", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8dataRead_8__pyx_unpickle_SymBufReader(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_8__pyx_unpickle_SymBufReader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + 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; + unsigned int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader", 1); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + */ + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__18, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + * __pyx_result = SymBufReader.__new__(__pyx_type) + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v___pyx_PickleError = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum # <<<<<<<<<<<<<< + * __pyx_result = SymBufReader.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + * __pyx_result = SymBufReader.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_8dataRead_SymBufReader), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; } } #endif { - PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1009, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1009, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1009, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1009, __pyx_L1_error) - __pyx_v_output = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; - - /* "dataRead.pyx":1010 - * unsigned long max_len, unsigned long long n_records): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) - * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') - */ - __pyx_v_rec = 0; + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; - /* "dataRead.pyx":1011 - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< - * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') - * return output + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + * __pyx_result = SymBufReader.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result */ - __pyx_t_9 = __pyx_v_n_records; - for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_9; __pyx_v_rec+=1) { + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); + if (__pyx_t_2) { - /* "dataRead.pyx":1012 - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< - * return output - * + /* "(tree fragment)":9 + * __pyx_result = SymBufReader.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1012, __pyx_L1_error) + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_8dataRead___pyx_unpickle_SymBufReader__set_state(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_kp_b__11}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_4, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + * __pyx_result = SymBufReader.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ } - /* "dataRead.pyx":1013 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') - * return output # <<<<<<<<<<<<<< - * - * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_output); - __pyx_r = ((PyObject *)__pyx_v_output); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; goto __pyx_L0; - /* "dataRead.pyx":1007 - * PyMem_Free(VLSDLen) - * - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + /* "(tree fragment)":1 + * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result */ /* 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_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("dataRead.equalize_byte_length", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; + __Pyx_AddTraceback("dataRead.__pyx_unpickle_SymBufReader", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":1015 - * return output - * - * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records, channel_format): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) +/* "(tree fragment)":11 + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char const *__pyx_v_bit_stream, unsigned PY_LONG_LONG *__pyx_v_pointer, unsigned long *__pyx_v_VLSDLen, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records, PyObject *__pyx_v_channel_format) { - PyArrayObject *__pyx_v_output = 0; - unsigned long __pyx_v_rec; +static PyObject *__pyx_f_8dataRead___pyx_unpickle_SymBufReader__set_state(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; + unsigned char __pyx_t_1[0x10000]; + Py_ssize_t __pyx_t_2; PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; + int __pyx_t_4; + int __pyx_t_5; PyObject *__pyx_t_6 = NULL; PyObject *__pyx_t_7 = NULL; unsigned int __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("equalize_string_length", 1); + __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader__set_state", 1); - /* "dataRead.pyx":1017 - * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, - * unsigned long max_len, unsigned long long n_records, channel_format): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[5]) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + if (unlikely((__Pyx_carray_from_py_unsigned_char(PyTuple_GET_ITEM(__pyx_v___pyx_state, 0), __pyx_t_1, 0x10000) < 0))) __PYX_ERR(1, 12, __pyx_L1_error) + if (unlikely((0x10000) != (0x10000))) { + PyErr_Format(PyExc_ValueError, "Assignment to slice of wrong length, expected %" CYTHON_FORMAT_SSIZE_T "d, got %" CYTHON_FORMAT_SSIZE_T "d", (Py_ssize_t)(0x10000), (Py_ssize_t)(0x10000)); + __PYX_ERR(1, 12, __pyx_L1_error) + } + memcpy(&(__pyx_v___pyx_result->_buf[0]), __pyx_t_1, sizeof(__pyx_v___pyx_result->_buf[0]) * (0x10000)); + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 1)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_v___pyx_result->_buf_len = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 2)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_v___pyx_result->_buf_start = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_v___pyx_state, 3); + __Pyx_INCREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1017, __pyx_L1_error); + __Pyx_GOTREF(__pyx_v___pyx_result->_fid); + __Pyx_DECREF(__pyx_v___pyx_result->_fid); + __pyx_v___pyx_result->_fid = __pyx_t_3; __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1017, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1017, __pyx_L1_error) - __pyx_v_output = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; - - /* "dataRead.pyx":1018 - * unsigned long max_len, unsigned long long n_records, channel_format): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) - * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') - */ - __pyx_v_rec = 0; + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 4)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_v___pyx_result->_pos = __pyx_t_2; - /* "dataRead.pyx":1019 - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< - * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') - * return output + /* "(tree fragment)":13 + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[5]) */ - __pyx_t_9 = __pyx_v_n_records; - for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_9; __pyx_v_rec+=1) { + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_2 > 5); + if (__pyx_t_5) { + } else { + __pyx_t_4 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_4) { - /* "dataRead.pyx":1020 - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') # <<<<<<<<<<<<<< - * return output + /* "(tree fragment)":14 + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[5]) # <<<<<<<<<<<<<< */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1020, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_6 = NULL; __pyx_t_8 = 0; #if CYTHON_UNPACK_METHODS - if (likely(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); + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); + __Pyx_DECREF_SET(__pyx_t_7, function); __pyx_t_8 = 1; } } #endif { - PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_channel_format}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1020, __pyx_L1_error) + PyObject *__pyx_callargs[2] = {__pyx_t_6, PyTuple_GET_ITEM(__pyx_v___pyx_state, 5)}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 14, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1020, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(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_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_kp_u__11}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1020, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_4, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1020, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - /* "dataRead.pyx":1021 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') - * return output # <<<<<<<<<<<<<< + /* "(tree fragment)":13 + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[5]) */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_output); - __pyx_r = ((PyObject *)__pyx_v_output); - goto __pyx_L0; + } - /* "dataRead.pyx":1015 - * return output - * - * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records, channel_format): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) + /* "(tree fragment)":11 + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): */ /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + 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); __Pyx_XDECREF(__pyx_t_6); __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("dataRead.equalize_string_length", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.__pyx_unpickle_SymBufReader__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_output); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } +static struct __pyx_vtabstruct_8dataRead_SymBufReader __pyx_vtable_8dataRead_SymBufReader; + +static PyObject *__pyx_tp_new_8dataRead_SymBufReader(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_8dataRead_SymBufReader *p; + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + #endif + p = ((struct __pyx_obj_8dataRead_SymBufReader *)o); + p->__pyx_vtab = __pyx_vtabptr_8dataRead_SymBufReader; + p->_fid = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_8dataRead_SymBufReader(PyObject *o) { + struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8dataRead_SymBufReader) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->_fid); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif +} + +static int __pyx_tp_traverse_8dataRead_SymBufReader(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; + if (p->_fid) { + e = (*v)(p->_fid, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_8dataRead_SymBufReader(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; + tmp = ((PyObject*)p->_fid); + p->_fid = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_8dataRead_SymBufReader[] = { + {"seek", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_3seek, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_12SymBufReader_2seek}, + {"tell", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_5tell, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_7read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_12SymBufReader_6read}, + {"fileno", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_9fileno, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8dataRead_SymBufReader_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8dataRead_SymBufReader}, + {Py_tp_doc, (void *)PyDoc_STR("Bidirectional-buffered wrapper around a Python file object.\n\n Drop-in replacement for any ``fid`` used in mdfreader metadata parsing:\n supports ``seek(pos[, whence])``, ``read([n])``, ``tell()``, ``fileno()``.\n ")}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8dataRead_SymBufReader}, + {Py_tp_clear, (void *)__pyx_tp_clear_8dataRead_SymBufReader}, + {Py_tp_methods, (void *)__pyx_methods_8dataRead_SymBufReader}, + {Py_tp_init, (void *)__pyx_pw_8dataRead_12SymBufReader_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_8dataRead_SymBufReader}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8dataRead_SymBufReader_spec = { + "dataRead.SymBufReader", + sizeof(struct __pyx_obj_8dataRead_SymBufReader), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + __pyx_type_8dataRead_SymBufReader_slots, +}; +#else + +static PyTypeObject __pyx_type_8dataRead_SymBufReader = { + PyVarObject_HEAD_INIT(0, 0) + "dataRead.""SymBufReader", /*tp_name*/ + sizeof(struct __pyx_obj_8dataRead_SymBufReader), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + __pyx_tp_dealloc_8dataRead_SymBufReader, /*tp_dealloc*/ + #if PY_VERSION_HEX < 0x030800b4 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030800b4 + 0, /*tp_vectorcall_offset*/ + #endif + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + #if PY_MAJOR_VERSION < 3 + 0, /*tp_compare*/ + #endif + #if PY_MAJOR_VERSION >= 3 + 0, /*tp_as_async*/ + #endif + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash*/ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ + PyDoc_STR("Bidirectional-buffered wrapper around a Python file object.\n\n Drop-in replacement for any ``fid`` used in mdfreader metadata parsing:\n supports ``seek(pos[, whence])``, ``read([n])``, ``tell()``, ``fileno()``.\n "), /*tp_doc*/ + __pyx_tp_traverse_8dataRead_SymBufReader, /*tp_traverse*/ + __pyx_tp_clear_8dataRead_SymBufReader, /*tp_clear*/ + 0, /*tp_richcompare*/ + 0, /*tp_weaklistoffset*/ + 0, /*tp_iter*/ + 0, /*tp_iternext*/ + __pyx_methods_8dataRead_SymBufReader, /*tp_methods*/ + 0, /*tp_members*/ + 0, /*tp_getset*/ + 0, /*tp_base*/ + 0, /*tp_dict*/ + 0, /*tp_descr_get*/ + 0, /*tp_descr_set*/ + #if !CYTHON_USE_TYPE_SPECS + 0, /*tp_dictoffset*/ + #endif + __pyx_pw_8dataRead_12SymBufReader_1__init__, /*tp_init*/ + 0, /*tp_alloc*/ + __pyx_tp_new_8dataRead_SymBufReader, /*tp_new*/ + 0, /*tp_free*/ + 0, /*tp_is_gc*/ + 0, /*tp_bases*/ + 0, /*tp_mro*/ + 0, /*tp_cache*/ + 0, /*tp_subclasses*/ + 0, /*tp_weaklist*/ + 0, /*tp_del*/ + 0, /*tp_version_tag*/ + #if PY_VERSION_HEX >= 0x030400a1 + #if CYTHON_USE_TP_FINALIZE + 0, /*tp_finalize*/ + #else + NULL, /*tp_finalize*/ + #endif + #endif + #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, /*tp_vectorcall*/ + #endif + #if __PYX_NEED_TP_PRINT_SLOT == 1 + 0, /*tp_print*/ + #endif + #if PY_VERSION_HEX >= 0x030C0000 + 0, /*tp_watched*/ + #endif + #if PY_VERSION_HEX >= 0x030d00A4 + 0, /*tp_versions_used*/ + #endif + #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, /*tp_pypy_flags*/ + #endif +}; +#endif static struct __pyx_vtabstruct_array __pyx_vtable_array; static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) { @@ -34525,8 +39616,10 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, {&__pyx_n_s_Flags, __pyx_k_Flags, sizeof(__pyx_k_Flags), 0, 0, 1, 1}, {&__pyx_n_u_ISO8859, __pyx_k_ISO8859, sizeof(__pyx_k_ISO8859), 0, 1, 0, 1}, + {&__pyx_kp_u_ISO_8859_1, __pyx_k_ISO_8859_1, sizeof(__pyx_k_ISO_8859_1), 0, 1, 0, 0}, {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, + {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_k_Incompatible_checksums_0x_x_vs_0_2, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_2), 0, 0, 1, 0}, {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1}, {&__pyx_kp_s_Index_out_of_bounds_axis_d, __pyx_k_Index_out_of_bounds_axis_d, sizeof(__pyx_k_Index_out_of_bounds_axis_d), 0, 0, 1, 0}, {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, @@ -34537,10 +39630,18 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, {&__pyx_kp_u_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 1, 0, 0}, + {&__pyx_n_s_OverflowError, __pyx_k_OverflowError, sizeof(__pyx_k_OverflowError), 0, 0, 1, 1}, {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, {&__pyx_n_u_S, __pyx_k_S, sizeof(__pyx_k_S), 0, 1, 0, 1}, {&__pyx_n_s_Sequence, __pyx_k_Sequence, sizeof(__pyx_k_Sequence), 0, 0, 1, 1}, {&__pyx_kp_s_Step_may_not_be_zero_axis_d, __pyx_k_Step_may_not_be_zero_axis_d, sizeof(__pyx_k_Step_may_not_be_zero_axis_d), 0, 0, 1, 0}, + {&__pyx_n_s_SymBufReader, __pyx_k_SymBufReader, sizeof(__pyx_k_SymBufReader), 0, 0, 1, 1}, + {&__pyx_n_s_SymBufReader___reduce_cython, __pyx_k_SymBufReader___reduce_cython, sizeof(__pyx_k_SymBufReader___reduce_cython), 0, 0, 1, 1}, + {&__pyx_n_s_SymBufReader___setstate_cython, __pyx_k_SymBufReader___setstate_cython, sizeof(__pyx_k_SymBufReader___setstate_cython), 0, 0, 1, 1}, + {&__pyx_n_s_SymBufReader_fileno, __pyx_k_SymBufReader_fileno, sizeof(__pyx_k_SymBufReader_fileno), 0, 0, 1, 1}, + {&__pyx_n_s_SymBufReader_read, __pyx_k_SymBufReader_read, sizeof(__pyx_k_SymBufReader_read), 0, 0, 1, 1}, + {&__pyx_n_s_SymBufReader_seek, __pyx_k_SymBufReader_seek, sizeof(__pyx_k_SymBufReader_seek), 0, 0, 1, 1}, + {&__pyx_n_s_SymBufReader_tell, __pyx_k_SymBufReader_tell, sizeof(__pyx_k_SymBufReader_tell), 0, 0, 1, 1}, {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, {&__pyx_kp_u_U, __pyx_k_U, sizeof(__pyx_k_U), 0, 1, 0, 0}, {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, @@ -34554,11 +39655,12 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_kp_u_V_2, __pyx_k_V_2, sizeof(__pyx_k_V_2), 0, 1, 0, 0}, {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1}, - {&__pyx_kp_b__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 0, 0, 0}, - {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, + {&__pyx_kp_b__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 0, 0, 0}, + {&__pyx_kp_b__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 0, 0, 0}, + {&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0}, {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, - {&__pyx_n_s__29, __pyx_k__29, sizeof(__pyx_k__29), 0, 0, 1, 1}, {&__pyx_n_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 1}, + {&__pyx_n_s__51, __pyx_k__51, sizeof(__pyx_k__51), 0, 0, 1, 1}, {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, {&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0}, {&__pyx_n_s_abc, __pyx_k_abc, sizeof(__pyx_k_abc), 0, 0, 1, 1}, @@ -34568,12 +39670,15 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1}, {&__pyx_n_s_asarray, __pyx_k_asarray, sizeof(__pyx_k_asarray), 0, 0, 1, 1}, {&__pyx_n_s_asyncio_coroutines, __pyx_k_asyncio_coroutines, sizeof(__pyx_k_asyncio_coroutines), 0, 0, 1, 1}, + {&__pyx_n_s_available, __pyx_k_available, sizeof(__pyx_k_available), 0, 0, 1, 1}, {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1}, {&__pyx_n_u_big, __pyx_k_big, sizeof(__pyx_k_big), 0, 1, 0, 1}, {&__pyx_n_s_bit_count, __pyx_k_bit_count, sizeof(__pyx_k_bit_count), 0, 0, 1, 1}, {&__pyx_n_s_bit_offset, __pyx_k_bit_offset, sizeof(__pyx_k_bit_offset), 0, 0, 1, 1}, {&__pyx_n_s_bit_stream, __pyx_k_bit_stream, sizeof(__pyx_k_bit_stream), 0, 0, 1, 1}, + {&__pyx_n_u_bom, __pyx_k_bom, sizeof(__pyx_k_bom), 0, 1, 0, 1}, {&__pyx_n_s_buf, __pyx_k_buf, sizeof(__pyx_k_buf), 0, 0, 1, 1}, + {&__pyx_n_s_buf_end, __pyx_k_buf_end, sizeof(__pyx_k_buf_end), 0, 0, 1, 1}, {&__pyx_n_s_byteOffset, __pyx_k_byteOffset, sizeof(__pyx_k_byteOffset), 0, 0, 1, 1}, {&__pyx_n_s_byte_length, __pyx_k_byte_length, sizeof(__pyx_k_byte_length), 0, 0, 1, 1}, {&__pyx_n_s_byteorder, __pyx_k_byteorder, sizeof(__pyx_k_byteorder), 0, 0, 1, 1}, @@ -34595,20 +39700,26 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0}, {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1}, + {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, {&__pyx_n_s_dataRead, __pyx_k_dataRead, sizeof(__pyx_k_dataRead), 0, 0, 1, 1}, {&__pyx_kp_s_dataRead_pyx, __pyx_k_dataRead_pyx, sizeof(__pyx_k_dataRead_pyx), 0, 0, 1, 0}, {&__pyx_n_s_data_block_length, __pyx_k_data_block_length, sizeof(__pyx_k_data_block_length), 0, 0, 1, 1}, {&__pyx_n_s_data_format, __pyx_k_data_format, sizeof(__pyx_k_data_format), 0, 0, 1, 1}, {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1}, {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, + {&__pyx_n_s_dict_2, __pyx_k_dict_2, sizeof(__pyx_k_dict_2), 0, 0, 1, 1}, {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1}, {&__pyx_n_s_empty, __pyx_k_empty, sizeof(__pyx_k_empty), 0, 0, 1, 1}, {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0}, {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, + {&__pyx_n_s_end, __pyx_k_end, sizeof(__pyx_k_end), 0, 0, 1, 1}, {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, + {&__pyx_n_s_errors, __pyx_k_errors, sizeof(__pyx_k_errors), 0, 0, 1, 1}, + {&__pyx_n_s_fid, __pyx_k_fid, sizeof(__pyx_k_fid), 0, 0, 1, 1}, + {&__pyx_n_s_fileno, __pyx_k_fileno, sizeof(__pyx_k_fileno), 0, 0, 1, 1}, {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, {&__pyx_n_s_float16, __pyx_k_float16, sizeof(__pyx_k_float16), 0, 0, 1, 1}, {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, @@ -34619,6 +39730,7 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, {&__pyx_kp_u_got, __pyx_k_got, sizeof(__pyx_k_got), 0, 1, 0, 0}, {&__pyx_kp_u_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 1, 0, 0}, + {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1}, @@ -34634,6 +39746,7 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_max_len, __pyx_k_max_len, sizeof(__pyx_k_max_len), 0, 0, 1, 1}, {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, + {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1}, {&__pyx_n_s_nBytes_aligned, __pyx_k_nBytes_aligned, sizeof(__pyx_k_nBytes_aligned), 0, 0, 1, 1}, {&__pyx_n_s_n_bytes, __pyx_k_n_bytes, sizeof(__pyx_k_n_bytes), 0, 0, 1, 1}, {&__pyx_n_s_n_records, __pyx_k_n_records, sizeof(__pyx_k_n_records), 0, 0, 1, 1}, @@ -34650,10 +39763,13 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_kp_u_numpy__core_umath_failed_to_impo, __pyx_k_numpy__core_umath_failed_to_impo, sizeof(__pyx_k_numpy__core_umath_failed_to_impo), 0, 1, 0, 0}, {&__pyx_n_s_numpy_format, __pyx_k_numpy_format, sizeof(__pyx_k_numpy_format), 0, 0, 1, 1}, {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, + {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1}, + {&__pyx_n_s_offsets_array, __pyx_k_offsets_array, sizeof(__pyx_k_offsets_array), 0, 0, 1, 1}, {&__pyx_n_s_order, __pyx_k_order, sizeof(__pyx_k_order), 0, 0, 1, 1}, {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, {&__pyx_n_s_pointer, __pyx_k_pointer, sizeof(__pyx_k_pointer), 0, 0, 1, 1}, + {&__pyx_n_s_pos, __pyx_k_pos, sizeof(__pyx_k_pos), 0, 0, 1, 1}, {&__pyx_n_s_pos_byte_beg, __pyx_k_pos_byte_beg, sizeof(__pyx_k_pos_byte_beg), 0, 0, 1, 1}, {&__pyx_n_s_pos_byte_end, __pyx_k_pos_byte_end, sizeof(__pyx_k_pos_byte_end), 0, 0, 1, 1}, {&__pyx_n_s_position, __pyx_k_position, sizeof(__pyx_k_position), 0, 0, 1, 1}, @@ -34663,8 +39779,10 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_unpickle_SymBufReader, __pyx_k_pyx_unpickle_SymBufReader, sizeof(__pyx_k_pyx_unpickle_SymBufReader), 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_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, + {&__pyx_n_s_read, __pyx_k_read, sizeof(__pyx_k_read), 0, 0, 1, 1}, {&__pyx_n_s_rec, __pyx_k_rec, sizeof(__pyx_k_rec), 0, 0, 1, 1}, {&__pyx_n_s_record, __pyx_k_record, sizeof(__pyx_k_record), 0, 0, 1, 1}, {&__pyx_n_u_record, __pyx_k_record, sizeof(__pyx_k_record), 0, 1, 0, 1}, @@ -34680,19 +39798,24 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, {&__pyx_n_s_register, __pyx_k_register, sizeof(__pyx_k_register), 0, 0, 1, 1}, + {&__pyx_n_u_replace, __pyx_k_replace, sizeof(__pyx_k_replace), 0, 1, 0, 1}, {&__pyx_n_s_rjust, __pyx_k_rjust, sizeof(__pyx_k_rjust), 0, 0, 1, 1}, {&__pyx_n_s_rstrip, __pyx_k_rstrip, sizeof(__pyx_k_rstrip), 0, 0, 1, 1}, {&__pyx_n_s_sd_block, __pyx_k_sd_block, sizeof(__pyx_k_sd_block), 0, 0, 1, 1}, {&__pyx_n_s_sd_block_length, __pyx_k_sd_block_length, sizeof(__pyx_k_sd_block_length), 0, 0, 1, 1}, {&__pyx_n_s_sd_data_read, __pyx_k_sd_data_read, sizeof(__pyx_k_sd_data_read), 0, 0, 1, 1}, + {&__pyx_n_s_seek, __pyx_k_seek, sizeof(__pyx_k_seek), 0, 0, 1, 1}, + {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, {&__pyx_n_s_signal_data_type, __pyx_k_signal_data_type, sizeof(__pyx_k_signal_data_type), 0, 0, 1, 1}, {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, + {&__pyx_n_s_sizes_array, __pyx_k_sizes_array, sizeof(__pyx_k_sizes_array), 0, 0, 1, 1}, {&__pyx_n_s_sorted_data_read, __pyx_k_sorted_data_read, sizeof(__pyx_k_sorted_data_read), 0, 0, 1, 1}, {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, + {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1}, {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1}, {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0}, @@ -34702,6 +39825,7 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1}, {&__pyx_n_s_swap_flag, __pyx_k_swap_flag, sizeof(__pyx_k_swap_flag), 0, 0, 1, 1}, {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, + {&__pyx_n_s_tell, __pyx_k_tell, sizeof(__pyx_k_tell), 0, 0, 1, 1}, {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, {&__pyx_n_s_tmp, __pyx_k_tmp, sizeof(__pyx_k_tmp), 0, 0, 1, 1}, {&__pyx_n_s_uint16, __pyx_k_uint16, sizeof(__pyx_k_uint16), 0, 0, 1, 1}, @@ -34710,13 +39834,19 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, {&__pyx_n_s_unsorted_data_read4, __pyx_k_unsorted_data_read4, sizeof(__pyx_k_unsorted_data_read4), 0, 0, 1, 1}, {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, + {&__pyx_n_s_use_setstate, __pyx_k_use_setstate, sizeof(__pyx_k_use_setstate), 0, 0, 1, 1}, {&__pyx_kp_u_utf_16, __pyx_k_utf_16, sizeof(__pyx_k_utf_16), 0, 1, 0, 0}, {&__pyx_kp_u_utf_16_2, __pyx_k_utf_16_2, sizeof(__pyx_k_utf_16_2), 0, 1, 0, 0}, + {&__pyx_kp_u_utf_16_be, __pyx_k_utf_16_be, sizeof(__pyx_k_utf_16_be), 0, 1, 0, 0}, + {&__pyx_kp_u_utf_16_le, __pyx_k_utf_16_le, sizeof(__pyx_k_utf_16_le), 0, 1, 0, 0}, {&__pyx_kp_u_utf_8, __pyx_k_utf_8, sizeof(__pyx_k_utf_8), 0, 1, 0, 0}, {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1}, + {&__pyx_n_s_vd_block, __pyx_k_vd_block, sizeof(__pyx_k_vd_block), 0, 0, 1, 1}, + {&__pyx_n_s_vd_data_read, __pyx_k_vd_data_read, sizeof(__pyx_k_vd_data_read), 0, 0, 1, 1}, {&__pyx_n_s_version_info, __pyx_k_version_info, sizeof(__pyx_k_version_info), 0, 0, 1, 1}, {&__pyx_n_s_view, __pyx_k_view, sizeof(__pyx_k_view), 0, 0, 1, 1}, {&__pyx_n_s_vlsd_len, __pyx_k_vlsd_len, sizeof(__pyx_k_vlsd_len), 0, 0, 1, 1}, + {&__pyx_n_s_whence, __pyx_k_whence, sizeof(__pyx_k_whence), 0, 0, 1, 1}, {&__pyx_n_s_zeros, __pyx_k_zeros, sizeof(__pyx_k_zeros), 0, 0, 1, 1}, {0, 0, 0, 0, 0, 0, 0} }; @@ -34724,16 +39854,17 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { } /* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 173, __pyx_L1_error) - __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 970, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 262, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 1060, __pyx_L1_error) + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 83, __pyx_L1_error) + __pyx_builtin_OverflowError = __Pyx_GetBuiltinName(__pyx_n_s_OverflowError); if (!__pyx_builtin_OverflowError) __PYX_ERR(1, 83, __pyx_L1_error) + __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 86, __pyx_L1_error) + __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 96, __pyx_L1_error) __pyx_builtin___import__ = __Pyx_GetBuiltinName(__pyx_n_s_import); if (!__pyx_builtin___import__) __PYX_ERR(1, 100, __pyx_L1_error) __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 141, __pyx_L1_error) - __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 159, __pyx_L1_error) - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error) __pyx_builtin_AssertionError = __Pyx_GetBuiltinName(__pyx_n_s_AssertionError); if (!__pyx_builtin_AssertionError) __PYX_ERR(1, 373, __pyx_L1_error) __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 408, __pyx_L1_error) __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 618, __pyx_L1_error) - __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 914, __pyx_L1_error) __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) __PYX_ERR(2, 1043, __pyx_L1_error) return 0; __pyx_L1_error:; @@ -34803,6 +39934,72 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10); + /* "dataRead.pyx":65 + * self._pos += pos + * else: # whence == 2 (from end) + * self._fid.seek(0, 2) # <<<<<<<<<<<<<< + * self._pos = self._fid.tell() + pos + * return self._pos + */ + __pyx_tuple__11 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_2); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 65, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + + /* "dataRead.pyx":1117 + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + */ + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1117, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__14); + __Pyx_GIVEREF(__pyx_tuple__14); + + /* "dataRead.pyx":1119 + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + */ + __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_utf_16_le); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 1119, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__15); + __Pyx_GIVEREF(__pyx_tuple__15); + + /* "dataRead.pyx":1121 + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) > 0: + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + */ + __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_utf_16_be); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1121, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__16); + __Pyx_GIVEREF(__pyx_tuple__16); + + /* "dataRead.pyx":1189 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 7: + * for i in range(n_records): + */ + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_ISO_8859_1); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 1189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + */ + __pyx_tuple__18 = PyTuple_Pack(3, __pyx_int_55633519, __pyx_int_120882827, __pyx_int_218071849); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__18); + __Pyx_GIVEREF(__pyx_tuple__18); + /* "View.MemoryView":100 * cdef object __pyx_collections_abc_Sequence "__pyx_collections_abc_Sequence" * try: @@ -34810,12 +40007,12 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence * else: */ - __pyx_tuple__12 = PyTuple_Pack(1, __pyx_n_s_sys); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 100, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - __pyx_tuple__13 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_3); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 100, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); + __pyx_tuple__19 = PyTuple_Pack(1, __pyx_n_s_sys); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + __pyx_tuple__20 = PyTuple_Pack(2, __pyx_int_3, __pyx_int_3); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__20); + __Pyx_GIVEREF(__pyx_tuple__20); /* "View.MemoryView":101 * try: @@ -34824,9 +40021,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * else: * __pyx_collections_abc_Sequence = __import__("collections").Sequence */ - __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_collections_abc); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__14); - __Pyx_GIVEREF(__pyx_tuple__14); + __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_collections_abc); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); /* "View.MemoryView":103 * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence @@ -34835,9 +40032,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * except: * */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_n_s_collections); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 103, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); + __pyx_tuple__22 = PyTuple_Pack(1, __pyx_n_s_collections); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(1, 103, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__22); + __Pyx_GIVEREF(__pyx_tuple__22); /* "View.MemoryView":309 * return self.name @@ -34846,9 +40043,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * cdef strided = Enum("") # default * cdef indirect = Enum("") */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(1, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__16); - __Pyx_GIVEREF(__pyx_tuple__16); + __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(1, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); /* "View.MemoryView":310 * @@ -34857,9 +40054,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * cdef indirect = Enum("") * */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 310, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); + __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(1, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__24); + __Pyx_GIVEREF(__pyx_tuple__24); /* "View.MemoryView":311 * cdef generic = Enum("") @@ -34868,9 +40065,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * * */ - __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__18); - __Pyx_GIVEREF(__pyx_tuple__18); + __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 311, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); /* "View.MemoryView":314 * @@ -34879,9 +40076,9 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * cdef indirect_contiguous = Enum("") * */ - __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 314, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); + __pyx_tuple__26 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(1, 314, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__26); + __Pyx_GIVEREF(__pyx_tuple__26); /* "View.MemoryView":315 * @@ -34890,55 +40087,143 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { * * */ - __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 315, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__20); - __Pyx_GIVEREF(__pyx_tuple__20); + __pyx_tuple__27 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(1, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); /* "(tree fragment)":1 * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_tuple__21 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 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_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_tuple__28 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__28); + __Pyx_GIVEREF(__pyx_tuple__28); + __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "dataRead.pyx":58 + * return 0 + * + * def seek(self, Py_ssize_t pos, int whence=0): # <<<<<<<<<<<<<< + * """Update logical cursor; does NOT touch the underlying file.""" + * if whence == 0: + */ + __pyx_tuple__30 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_pos, __pyx_n_s_whence); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__30); + __Pyx_GIVEREF(__pyx_tuple__30); + __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_seek, 58, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 58, __pyx_L1_error) + __pyx_tuple__32 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__32); + __Pyx_GIVEREF(__pyx_tuple__32); + + /* "dataRead.pyx":69 + * return self._pos + * + * def tell(self): # <<<<<<<<<<<<<< + * return self._pos + * + */ + __pyx_tuple__33 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 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_dataRead_pyx, __pyx_n_s_tell, 69, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 69, __pyx_L1_error) + + /* "dataRead.pyx":72 + * return self._pos + * + * def read(self, Py_ssize_t n=-1): # <<<<<<<<<<<<<< + * """Return up to n bytes from the current position (or all if n<0).""" + * cdef Py_ssize_t pos = self._pos + */ + __pyx_tuple__35 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_n, __pyx_n_s_pos, __pyx_n_s_buf_end, __pyx_n_s_offset, __pyx_n_s_available, __pyx_n_s_end, __pyx_n_s_data); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 8, 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_dataRead_pyx, __pyx_n_s_read, 72, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 72, __pyx_L1_error) - /* "dataRead.pyx":12 - * cimport cython + /* "dataRead.pyx":97 + * return data + * + * def fileno(self): # <<<<<<<<<<<<<< + * return self._fid.fileno() + * + */ + __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 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_dataRead_pyx, __pyx_n_s_fileno, 97, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 97, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_tuple__38 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_state, __pyx_n_s_dict_2, __pyx_n_s_use_setstate); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); + __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 4, 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_stringsource, __pyx_n_s_reduce_cython, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(1, 1, __pyx_L1_error) + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_SymBufReader__set_state(self, __pyx_state) + */ + __pyx_tuple__40 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_pyx_state); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__40); + __Pyx_GIVEREF(__pyx_tuple__40); + __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(1, 16, __pyx_L1_error) + + /* "dataRead.pyx":101 + * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) * def sorted_data_read(bytes tmp, unsigned short bit_count, */ - __pyx_tuple__23 = PyTuple_Pack(12, __pyx_n_s_tmp, __pyx_n_s_bit_count, __pyx_n_s_signal_data_type, __pyx_n_s_record_format, __pyx_n_s_number_of_records, __pyx_n_s_record_byte_size, __pyx_n_s_bit_offset, __pyx_n_s_pos_byte_beg, __pyx_n_s_n_bytes, __pyx_n_s_array, __pyx_n_s_bit_stream, __pyx_n_s_swap_flag); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); - __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(10, 0, 0, 12, 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_dataRead_pyx, __pyx_n_s_sorted_data_read, 12, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 12, __pyx_L1_error) + __pyx_tuple__42 = PyTuple_Pack(12, __pyx_n_s_tmp, __pyx_n_s_bit_count, __pyx_n_s_signal_data_type, __pyx_n_s_record_format, __pyx_n_s_number_of_records, __pyx_n_s_record_byte_size, __pyx_n_s_bit_offset, __pyx_n_s_pos_byte_beg, __pyx_n_s_n_bytes, __pyx_n_s_array, __pyx_n_s_bit_stream, __pyx_n_s_swap_flag); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__42); + __Pyx_GIVEREF(__pyx_tuple__42); + __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(10, 0, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sorted_data_read, 101, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 101, __pyx_L1_error) - /* "dataRead.pyx":807 + /* "dataRead.pyx":897 * return buf.byteswap() * * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< * const unsigned short record_id_size, * const unsigned long long data_block_length): */ - __pyx_tuple__25 = PyTuple_Pack(28, __pyx_n_s_record, __pyx_n_s_info, __pyx_n_s_tmp, __pyx_n_s_record_id_size, __pyx_n_s_data_block_length, __pyx_n_s_bit_stream, __pyx_n_s_position, __pyx_n_s_record_id_char, __pyx_n_s_record_id_short, __pyx_n_s_record_id_long, __pyx_n_s_record_id_long_long, __pyx_n_s_buf, __pyx_n_s_VLSD, __pyx_n_s_pos_byte_beg, __pyx_n_s_pos_byte_end, __pyx_n_s_c_format_structure, __pyx_n_s_byte_length, __pyx_n_s_numpy_format, __pyx_n_s_index, __pyx_n_s_CGrecordLength, __pyx_n_s_VLSD_flag, __pyx_n_s_VLSD_CG_name, __pyx_n_s_VLSD_CG_signal_data_type, __pyx_n_s_channel_name_set, __pyx_n_s_record_id, __pyx_n_s_Channel, __pyx_n_s_name, __pyx_n_s_channel_name); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 807, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__25); - __Pyx_GIVEREF(__pyx_tuple__25); - __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 28, 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_dataRead_pyx, __pyx_n_s_unsorted_data_read4, 807, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 807, __pyx_L1_error) + __pyx_tuple__44 = PyTuple_Pack(28, __pyx_n_s_record, __pyx_n_s_info, __pyx_n_s_tmp, __pyx_n_s_record_id_size, __pyx_n_s_data_block_length, __pyx_n_s_bit_stream, __pyx_n_s_position, __pyx_n_s_record_id_char, __pyx_n_s_record_id_short, __pyx_n_s_record_id_long, __pyx_n_s_record_id_long_long, __pyx_n_s_buf, __pyx_n_s_VLSD, __pyx_n_s_pos_byte_beg, __pyx_n_s_pos_byte_end, __pyx_n_s_c_format_structure, __pyx_n_s_byte_length, __pyx_n_s_numpy_format, __pyx_n_s_index, __pyx_n_s_CGrecordLength, __pyx_n_s_VLSD_flag, __pyx_n_s_VLSD_CG_name, __pyx_n_s_VLSD_CG_signal_data_type, __pyx_n_s_channel_name_set, __pyx_n_s_record_id, __pyx_n_s_Channel, __pyx_n_s_name, __pyx_n_s_channel_name); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 897, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__44); + __Pyx_GIVEREF(__pyx_tuple__44); + __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_unsorted_data_read4, 897, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 897, __pyx_L1_error) - /* "dataRead.pyx":942 + /* "dataRead.pyx":1032 * * * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< * unsigned long long sd_block_length, unsigned long long n_records): * """ Reads vlsd channel from its SD Block bytes */ - __pyx_tuple__27 = PyTuple_Pack(11, __pyx_n_s_signal_data_type, __pyx_n_s_sd_block, __pyx_n_s_sd_block_length, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_max_len, __pyx_n_s_vlsd_len, __pyx_n_s_VLSDLen, __pyx_n_s_pointer, __pyx_n_s_rec, __pyx_n_s_channel_format); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 942, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 11, 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_dataRead_pyx, __pyx_n_s_sd_data_read, 942, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 942, __pyx_L1_error) + __pyx_tuple__46 = PyTuple_Pack(11, __pyx_n_s_signal_data_type, __pyx_n_s_sd_block, __pyx_n_s_sd_block_length, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_max_len, __pyx_n_s_vlsd_len, __pyx_n_s_VLSDLen, __pyx_n_s_pointer, __pyx_n_s_rec, __pyx_n_s_channel_format); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1032, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__46); + __Pyx_GIVEREF(__pyx_tuple__46); + __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sd_data_read, 1032, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 1032, __pyx_L1_error) + + /* "dataRead.pyx":1130 + * + * + * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< + * object offsets_array, object sizes_array, + * unsigned long long n_records): + */ + __pyx_tuple__48 = PyTuple_Pack(10, __pyx_n_s_signal_data_type, __pyx_n_s_vd_block, __pyx_n_s_offsets_array, __pyx_n_s_sizes_array, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_i, __pyx_n_s_offset, __pyx_n_s_size, __pyx_n_s_max_len); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__48); + __Pyx_GIVEREF(__pyx_tuple__48); + __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_vd_data_read, 1130, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 1130, __pyx_L1_error) + + /* "(tree fragment)":1 + * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_SymBufReader, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -34960,9 +40245,18 @@ static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_9 = PyInt_FromLong(9); if (unlikely(!__pyx_int_9)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_33 = PyInt_FromLong(33); if (unlikely(!__pyx_int_33)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_187 = PyInt_FromLong(187); if (unlikely(!__pyx_int_187)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_191 = PyInt_FromLong(191); if (unlikely(!__pyx_int_191)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_239 = PyInt_FromLong(239); if (unlikely(!__pyx_int_239)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_254 = PyInt_FromLong(254); if (unlikely(!__pyx_int_254)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_255 = PyInt_FromLong(255); if (unlikely(!__pyx_int_255)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_65536 = PyInt_FromLong(65536L); if (unlikely(!__pyx_int_65536)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_55633519 = PyInt_FromLong(55633519L); if (unlikely(!__pyx_int_55633519)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_112105877 = PyInt_FromLong(112105877L); if (unlikely(!__pyx_int_112105877)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_120882827 = PyInt_FromLong(120882827L); if (unlikely(!__pyx_int_120882827)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_136983863 = PyInt_FromLong(136983863L); if (unlikely(!__pyx_int_136983863)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_218071849 = PyInt_FromLong(218071849L); if (unlikely(!__pyx_int_218071849)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) return 0; __pyx_L1_error:; @@ -35047,6 +40341,35 @@ static int __Pyx_modinit_type_init_code(void) { int __pyx_clineno = 0; __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); /*--- Type init code ---*/ + __pyx_vtabptr_8dataRead_SymBufReader = &__pyx_vtable_8dataRead_SymBufReader; + __pyx_vtable_8dataRead_SymBufReader._fill = (int (*)(struct __pyx_obj_8dataRead_SymBufReader *, Py_ssize_t))__pyx_f_8dataRead_12SymBufReader__fill; + #if CYTHON_USE_TYPE_SPECS + __pyx_ptype_8dataRead_SymBufReader = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8dataRead_SymBufReader_spec, NULL); if (unlikely(!__pyx_ptype_8dataRead_SymBufReader)) __PYX_ERR(0, 25, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8dataRead_SymBufReader_spec, __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + #else + __pyx_ptype_8dataRead_SymBufReader = &__pyx_type_8dataRead_SymBufReader; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + #endif + #if !CYTHON_USE_TYPE_SPECS + if (__Pyx_PyType_Ready(__pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + #endif + #if PY_MAJOR_VERSION < 3 + __pyx_ptype_8dataRead_SymBufReader->tp_print = 0; + #endif + #if !CYTHON_COMPILING_IN_LIMITED_API + if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_ptype_8dataRead_SymBufReader->tp_dictoffset && __pyx_ptype_8dataRead_SymBufReader->tp_getattro == PyObject_GenericGetAttr)) { + __pyx_ptype_8dataRead_SymBufReader->tp_getattro = __Pyx_PyObject_GenericGetAttr; + } + #endif + if (__Pyx_SetVtable(__pyx_ptype_8dataRead_SymBufReader, __pyx_vtabptr_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_MergeVtables(__pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + #endif + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SymBufReader, (PyObject *) __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + #if !CYTHON_COMPILING_IN_LIMITED_API + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + #endif __pyx_vtabptr_array = &__pyx_vtable_array; __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; #if CYTHON_USE_TYPE_SPECS @@ -35564,12 +40887,12 @@ if (!__Pyx_RefNanny) { * __pyx_collections_abc_Sequence = __import__("collections.abc").abc.Sequence * else: */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 100, __pyx_L2_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 100, __pyx_L2_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_version_info); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 100, __pyx_L2_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_tuple__13, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 100, __pyx_L2_error) + __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_tuple__20, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 100, __pyx_L2_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(1, 100, __pyx_L2_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; @@ -35582,7 +40905,7 @@ if (!__Pyx_RefNanny) { * else: * __pyx_collections_abc_Sequence = __import__("collections").Sequence */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 101, __pyx_L2_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 101, __pyx_L2_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_abc); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 101, __pyx_L2_error) __Pyx_GOTREF(__pyx_t_5); @@ -35613,7 +40936,7 @@ if (!__Pyx_RefNanny) { * */ /*else*/ { - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 103, __pyx_L2_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin___import__, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 103, __pyx_L2_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 103, __pyx_L2_error) __Pyx_GOTREF(__pyx_t_5); @@ -35778,7 +41101,7 @@ if (!__Pyx_RefNanny) { * cdef strided = Enum("") # default * cdef indirect = Enum("") */ - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 309, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 309, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(generic); __Pyx_DECREF_SET(generic, __pyx_t_7); @@ -35792,7 +41115,7 @@ if (!__Pyx_RefNanny) { * cdef indirect = Enum("") * */ - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 310, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 310, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(strided); __Pyx_DECREF_SET(strided, __pyx_t_7); @@ -35806,7 +41129,7 @@ if (!__Pyx_RefNanny) { * * */ - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 311, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 311, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(indirect); __Pyx_DECREF_SET(indirect, __pyx_t_7); @@ -35820,7 +41143,7 @@ if (!__Pyx_RefNanny) { * cdef indirect_contiguous = Enum("") * */ - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 314, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 314, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(contiguous); __Pyx_DECREF_SET(contiguous, __pyx_t_7); @@ -35834,7 +41157,7 @@ if (!__Pyx_RefNanny) { * * */ - __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 315, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 315, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_XGOTREF(indirect_contiguous); __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_7); @@ -36086,40 +41409,139 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":12 - * cimport cython + /* "dataRead.pyx":58 + * return 0 + * + * def seek(self, Py_ssize_t pos, int whence=0): # <<<<<<<<<<<<<< + * """Update logical cursor; does NOT touch the underlying file.""" + * if whence == 0: + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_3seek, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_seek, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__32); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_seek, __pyx_t_4) < 0) __PYX_ERR(0, 58, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); + + /* "dataRead.pyx":69 + * return self._pos + * + * def tell(self): # <<<<<<<<<<<<<< + * return self._pos + * + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_5tell, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_tell, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_tell, __pyx_t_4) < 0) __PYX_ERR(0, 69, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); + + /* "dataRead.pyx":72 + * return self._pos + * + * def read(self, Py_ssize_t n=-1): # <<<<<<<<<<<<<< + * """Return up to n bytes from the current position (or all if n<0).""" + * cdef Py_ssize_t pos = self._pos + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_7read, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__4); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_read, __pyx_t_4) < 0) __PYX_ERR(0, 72, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); + + /* "dataRead.pyx":97 + * return data + * + * def fileno(self): # <<<<<<<<<<<<<< + * return self._fid.fileno() + * + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_9fileno, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_fileno, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_fileno, __pyx_t_4) < 0) __PYX_ERR(0, 97, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); + + /* "(tree fragment)":1 + * def __reduce_cython__(self): # <<<<<<<<<<<<<< + * cdef tuple state + * cdef object _dict + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_11__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader___reduce_cython, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_reduce_cython, __pyx_t_4) < 0) __PYX_ERR(1, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); + + /* "(tree fragment)":16 + * else: + * return __pyx_unpickle_SymBufReader, (type(self), 0x350e66f, state) + * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< + * __pyx_unpickle_SymBufReader__set_state(self, __pyx_state) + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_13__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader___setstate_cython, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__41)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_setstate_cython, __pyx_t_4) < 0) __PYX_ERR(1, 16, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); + + /* "dataRead.pyx":101 + * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) * def sorted_data_read(bytes tmp, unsigned short bit_count, */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_1sorted_data_read, 0, __pyx_n_s_sorted_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 12, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_1sorted_data_read, 0, __pyx_n_s_sorted_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 101, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sorted_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 12, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sorted_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 101, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":807 + /* "dataRead.pyx":897 * return buf.byteswap() * * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< * const unsigned short record_id_size, * const unsigned long long data_block_length): */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_3unsorted_data_read4, 0, __pyx_n_s_unsorted_data_read4, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 807, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_3unsorted_data_read4, 0, __pyx_n_s_unsorted_data_read4, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 897, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_unsorted_data_read4, __pyx_t_4) < 0) __PYX_ERR(0, 807, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_unsorted_data_read4, __pyx_t_4) < 0) __PYX_ERR(0, 897, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":942 + /* "dataRead.pyx":1032 * * * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< * unsigned long long sd_block_length, unsigned long long n_records): * """ Reads vlsd channel from its SD Block bytes */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_5sd_data_read, 0, __pyx_n_s_sd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 942, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_5sd_data_read, 0, __pyx_n_s_sd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1032, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1032, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1130 + * + * + * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< + * object offsets_array, object sizes_array, + * unsigned long long n_records): + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_7vd_data_read, 0, __pyx_n_s_vd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1130, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_vd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1130, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_9__pyx_unpickle_SymBufReader, 0, __pyx_n_s_pyx_unpickle_SymBufReader, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 942, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_SymBufReader, __pyx_t_4) < 0) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "dataRead.pyx":1 @@ -36361,6 +41783,204 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) { return result; } +/* GetTopmostException */ +#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE +static _PyErr_StackItem * +__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) +{ + _PyErr_StackItem *exc_info = tstate->exc_info; + while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && + exc_info->previous_item != NULL) + { + exc_info = exc_info->previous_item; + } + return exc_info; +} +#endif + +/* SaveResetException */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + PyObject *exc_value = exc_info->exc_value; + if (exc_value == NULL || exc_value == Py_None) { + *value = NULL; + *type = NULL; + *tb = NULL; + } else { + *value = exc_value; + Py_INCREF(*value); + *type = (PyObject*) Py_TYPE(exc_value); + Py_INCREF(*type); + *tb = PyException_GetTraceback(exc_value); + } + #elif CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); + *type = exc_info->exc_type; + *value = exc_info->exc_value; + *tb = exc_info->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #else + *type = tstate->exc_type; + *value = tstate->exc_value; + *tb = tstate->exc_traceback; + Py_XINCREF(*type); + Py_XINCREF(*value); + Py_XINCREF(*tb); + #endif +} +static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 + _PyErr_StackItem *exc_info = tstate->exc_info; + PyObject *tmp_value = exc_info->exc_value; + exc_info->exc_value = value; + Py_XDECREF(tmp_value); + Py_XDECREF(type); + Py_XDECREF(tb); + #else + PyObject *tmp_type, *tmp_value, *tmp_tb; + #if CYTHON_USE_EXC_INFO_STACK + _PyErr_StackItem *exc_info = tstate->exc_info; + tmp_type = exc_info->exc_type; + tmp_value = exc_info->exc_value; + tmp_tb = exc_info->exc_traceback; + exc_info->exc_type = type; + exc_info->exc_value = value; + exc_info->exc_traceback = tb; + #else + tmp_type = tstate->exc_type; + tmp_value = tstate->exc_value; + tmp_tb = tstate->exc_traceback; + tstate->exc_type = type; + tstate->exc_value = value; + tstate->exc_traceback = tb; + #endif + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); + #endif +} +#endif + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); + 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); +} +static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (cls == a || cls == b) return 1; + mro = cls->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + PyObject *base = PyTuple_GET_ITEM(mro, i); + if (base == (PyObject *)a || base == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, 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) { + if (exc_type1) { + return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); + } else { + return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } +} +#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; iexc_info; - while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) && - exc_info->previous_item != NULL) - { - exc_info = exc_info->previous_item; - } - return exc_info; -} -#endif - -/* SaveResetException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - PyObject *exc_value = exc_info->exc_value; - if (exc_value == NULL || exc_value == Py_None) { - *value = NULL; - *type = NULL; - *tb = NULL; - } else { - *value = exc_value; - Py_INCREF(*value); - *type = (PyObject*) Py_TYPE(exc_value); - Py_INCREF(*type); - *tb = PyException_GetTraceback(exc_value); - } - #elif CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - *type = exc_info->exc_type; - *value = exc_info->exc_value; - *tb = exc_info->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); - #else - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); - #endif -} -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4 - _PyErr_StackItem *exc_info = tstate->exc_info; - PyObject *tmp_value = exc_info->exc_value; - exc_info->exc_value = value; - Py_XDECREF(tmp_value); - Py_XDECREF(type); - Py_XDECREF(tb); - #else - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = type; - exc_info->exc_value = value; - exc_info->exc_traceback = tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); - #endif -} -#endif - /* GetException */ #if CYTHON_FAST_THREAD_STATE static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) @@ -38351,122 +43889,6 @@ static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple) return __Pyx__ImportDottedModule(name, parts_tuple); } -/* FastTypeChecks */ -#if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*); - 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); -} -static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (cls == a || cls == b) return 1; - mro = cls->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - PyObject *base = PyTuple_GET_ITEM(mro, i); - if (base == (PyObject *)a || base == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, 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) { - if (exc_type1) { - return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2); - } else { - return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } -} -#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; i 0) { - r = a.real; - theta = 0; - } else { - r = -a.real; - theta = atan2(0.0, -1.0); - } - } else { - r = __Pyx_c_abs_double(a); - theta = atan2(a.imag, a.real); - } - lnr = log(r); - z_r = exp(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cos(z_theta); - z.imag = z_r * sin(z_theta); - return z; - } - #endif -#endif - -/* 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;\ - } + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_double(a); + theta = atan2(a.imag, a.real); + } + lnr = log(r); + z_r = exp(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cos(z_theta); + z.imag = z_r * sin(z_theta); + return z; + } + #endif +#endif /* TypeInfoCompare */ static int @@ -42946,6 +48368,273 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje #endif #endif +/* CIntFromPy */ + static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(unsigned char) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(unsigned char, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned char) val; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + unsigned char val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned char) -1; + val = __Pyx_PyInt_As_unsigned_char(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(unsigned char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) >= 2 * PyLong_SHIFT)) { + return (unsigned char) (((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(unsigned char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) >= 3 * PyLong_SHIFT)) { + return (unsigned char) (((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(unsigned char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) >= 4 * PyLong_SHIFT)) { + return (unsigned char) (((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + 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 char) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(unsigned char) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(unsigned char) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned char) (((unsigned char)-1)*(((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(unsigned char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned char) ((((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned char) (((unsigned char)-1)*(((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(unsigned char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned char) ((((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned char) (((unsigned char)-1)*(((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(unsigned char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned char) ((((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(unsigned char) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned char, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned char) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned char, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + unsigned char val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (unsigned char) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (unsigned char) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (unsigned char) -1; + } else { + stepval = v; + } + v = NULL; + val = (unsigned char) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(unsigned char) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((unsigned char) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(unsigned char) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((unsigned char) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((unsigned char) 1) << (sizeof(unsigned char) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (unsigned char) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned char"); + return (unsigned char) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned char"); + return (unsigned char) -1; +} + /* MemviewSliceCopyTemplate */ static __Pyx_memviewslice __pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, @@ -43116,36 +48805,303 @@ __Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) Py_INCREF((PyObject *) memview); PyGILState_Release(_gilstate); } - } else { - __pyx_fatalerror("Acquisition count is %d (line %d)", - old_acquisition_count+1, lineno); + } else { + __pyx_fatalerror("Acquisition count is %d (line %d)", + old_acquisition_count+1, lineno); + } + } +} +static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + __pyx_nonatomic_int_type old_acquisition_count; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; + } + old_acquisition_count = __pyx_sub_acquisition_count(memview); + memslice->data = NULL; + if (likely(old_acquisition_count > 1)) { + memslice->memview = NULL; + } else if (likely(old_acquisition_count == 1)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); + } + } else { + __pyx_fatalerror("Acquisition count is %d (line %d)", + old_acquisition_count-1, lineno); + } +} + +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + 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; + } + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + 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 && PY_VERSION_HEX < 0x030C00A7 + 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 + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + 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 + } + } + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; + } + is_negative = result == 1; } - } -} -static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, - int have_gil, int lineno) { - __pyx_nonatomic_int_type old_acquisition_count; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (unlikely(!memview || (PyObject *) memview == Py_None)) { - memslice->memview = NULL; - return; - } - old_acquisition_count = __pyx_sub_acquisition_count(memview); - memslice->data = NULL; - if (likely(old_acquisition_count > 1)) { - memslice->memview = NULL; - } else if (likely(old_acquisition_count == 1)) { - if (have_gil) { - Py_CLEAR(memslice->memview); + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_CLEAR(memslice->memview); - PyGILState_Release(_gilstate); + stepval = v; } - } else { - __pyx_fatalerror("Acquisition count is %d (line %d)", - old_acquisition_count-1, lineno); + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + 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 */ @@ -43906,487 +49862,78 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, digit = PyNumber_And(stepval, mask); if (unlikely(!digit)) goto done; idigit = PyLong_AsLong(digit); - Py_DECREF(digit); - if (unlikely(idigit < 0)) goto done; - val |= ((unsigned long) idigit) << bits; - tmp = PyNumber_Rshift(stepval, shift); - if (unlikely(!tmp)) goto done; - Py_DECREF(stepval); stepval = tmp; - } - Py_DECREF(shift); shift = NULL; - Py_DECREF(mask); mask = NULL; - { - long idigit = PyLong_AsLong(stepval); - if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(unsigned long) * 8) - bits - (is_unsigned ? 0 : 1); - if (unlikely(idigit >= (1L << remaining_bits))) - goto raise_overflow; - val |= ((unsigned long) idigit) << bits; - } - if (!is_unsigned) { - if (unlikely(val & (((unsigned long) 1) << (sizeof(unsigned long) * 8 - 1)))) - goto raise_overflow; - if (is_negative) - val = ~val; - } - ret = 0; - done: - Py_XDECREF(shift); - Py_XDECREF(mask); - Py_XDECREF(stepval); -#endif - if (unlikely(ret)) - return (unsigned long) -1; - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to unsigned long"); - return (unsigned long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long) -1; -} - -/* CIntFromPy */ - static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *x) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if ((sizeof(unsigned char) < sizeof(long))) { - __PYX_VERIFY_RETURN_INT(unsigned char, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (unsigned char) val; - } - } -#endif - if (unlikely(!PyLong_Check(x))) { - unsigned char val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (unsigned char) -1; - val = __Pyx_PyInt_As_unsigned_char(tmp); - Py_DECREF(tmp); - return val; - } - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - if (unlikely(__Pyx_PyLong_IsNeg(x))) { - goto raise_neg_overflow; - } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_DigitCount(x)) { - case 2: - if ((8 * sizeof(unsigned char) > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) >= 2 * PyLong_SHIFT)) { - return (unsigned char) (((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); - } - } - break; - case 3: - if ((8 * sizeof(unsigned char) > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) >= 3 * PyLong_SHIFT)) { - return (unsigned char) (((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); - } - } - break; - case 4: - if ((8 * sizeof(unsigned char) > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) >= 4 * PyLong_SHIFT)) { - return (unsigned char) (((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); - } - } - break; - } - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 - 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 char) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if ((sizeof(unsigned char) <= sizeof(unsigned long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_SignedDigitCount(x)) { - case -2: - if ((8 * sizeof(unsigned char) - 1 > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned char) (((unsigned char)-1)*(((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); - } - } - break; - case 2: - if ((8 * sizeof(unsigned char) > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned char) ((((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); - } - } - break; - case -3: - if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned char) (((unsigned char)-1)*(((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); - } - } - break; - case 3: - if ((8 * sizeof(unsigned char) > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned char) ((((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); - } - } - break; - case -4: - if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned char) (((unsigned char)-1)*(((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); - } - } - break; - case 4: - if ((8 * sizeof(unsigned char) > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned char) ((((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); - } - } - break; - } - } -#endif - if ((sizeof(unsigned char) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned char, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned char) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned char, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { - unsigned char val; - int ret = -1; -#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API - Py_ssize_t bytes_copied = PyLong_AsNativeBytes( - x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); - if (unlikely(bytes_copied == -1)) { - } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { - goto raise_overflow; - } else { - ret = 0; - } -#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - ret = _PyLong_AsByteArray((PyLongObject *)x, - bytes, sizeof(val), - is_little, !is_unsigned); -#else - PyObject *v; - PyObject *stepval = NULL, *mask = NULL, *shift = NULL; - int bits, remaining_bits, is_negative = 0; - int chunk_size = (sizeof(long) < 8) ? 30 : 62; - if (likely(PyLong_CheckExact(x))) { - v = __Pyx_NewRef(x); - } else { - v = PyNumber_Long(x); - if (unlikely(!v)) return (unsigned char) -1; - assert(PyLong_CheckExact(v)); - } - { - int result = PyObject_RichCompareBool(v, Py_False, Py_LT); - if (unlikely(result < 0)) { - Py_DECREF(v); - return (unsigned char) -1; - } - is_negative = result == 1; - } - if (is_unsigned && unlikely(is_negative)) { - Py_DECREF(v); - goto raise_neg_overflow; - } else if (is_negative) { - stepval = PyNumber_Invert(v); - Py_DECREF(v); - if (unlikely(!stepval)) - return (unsigned char) -1; - } else { - stepval = v; - } - v = NULL; - val = (unsigned char) 0; - mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; - shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(unsigned char) * 8 - chunk_size; bits += chunk_size) { - PyObject *tmp, *digit; - long idigit; - digit = PyNumber_And(stepval, mask); - if (unlikely(!digit)) goto done; - idigit = PyLong_AsLong(digit); - Py_DECREF(digit); - if (unlikely(idigit < 0)) goto done; - val |= ((unsigned char) idigit) << bits; - tmp = PyNumber_Rshift(stepval, shift); - if (unlikely(!tmp)) goto done; - Py_DECREF(stepval); stepval = tmp; - } - Py_DECREF(shift); shift = NULL; - Py_DECREF(mask); mask = NULL; - { - long idigit = PyLong_AsLong(stepval); - if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(unsigned char) * 8) - bits - (is_unsigned ? 0 : 1); - if (unlikely(idigit >= (1L << remaining_bits))) - goto raise_overflow; - val |= ((unsigned char) idigit) << bits; - } - if (!is_unsigned) { - if (unlikely(val & (((unsigned char) 1) << (sizeof(unsigned char) * 8 - 1)))) - goto raise_overflow; - if (is_negative) - val = ~val; - } - ret = 0; - done: - Py_XDECREF(shift); - Py_XDECREF(mask); - Py_XDECREF(stepval); -#endif - if (unlikely(ret)) - return (unsigned char) -1; - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to unsigned char"); - return (unsigned char) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned char"); - return (unsigned char) -1; -} - -/* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG) -1, const_zero = (unsigned PY_LONG_LONG) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(unsigned PY_LONG_LONG) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(unsigned PY_LONG_LONG) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - unsigned char *bytes = (unsigned char *)&value; -#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 - if (is_unsigned) { - return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); - } else { - return PyLong_FromNativeBytes(bytes, sizeof(value), -1); - } -#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 - int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(unsigned PY_LONG_LONG), - little, !is_unsigned); -#else - int one = 1; int little = (int)*(unsigned char *)&one; - PyObject *from_bytes, *result = NULL; - PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; - from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); - if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned PY_LONG_LONG)); - if (!py_bytes) goto limited_bad; - order_str = PyUnicode_FromString(little ? "little" : "big"); - if (!order_str) goto limited_bad; - arg_tuple = PyTuple_Pack(2, py_bytes, order_str); - if (!arg_tuple) goto limited_bad; - if (!is_unsigned) { - kwds = PyDict_New(); - if (!kwds) goto limited_bad; - if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; - } - result = PyObject_Call(from_bytes, arg_tuple, kwds); - limited_bad: - Py_XDECREF(kwds); - Py_XDECREF(arg_tuple); - Py_XDECREF(order_str); - Py_XDECREF(py_bytes); - Py_XDECREF(from_bytes); - return result; -#endif - } -} - -/* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(uint16_t) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(uint16_t) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(uint16_t) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - unsigned char *bytes = (unsigned char *)&value; -#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 - if (is_unsigned) { - return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); - } else { - return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((unsigned long) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(unsigned long) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((unsigned long) idigit) << bits; } -#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 - int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(uint16_t), - little, !is_unsigned); -#else - int one = 1; int little = (int)*(unsigned char *)&one; - PyObject *from_bytes, *result = NULL; - PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; - from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); - if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint16_t)); - if (!py_bytes) goto limited_bad; - order_str = PyUnicode_FromString(little ? "little" : "big"); - if (!order_str) goto limited_bad; - arg_tuple = PyTuple_Pack(2, py_bytes, order_str); - if (!arg_tuple) goto limited_bad; if (!is_unsigned) { - kwds = PyDict_New(); - if (!kwds) goto limited_bad; - if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + if (unlikely(val & (((unsigned long) 1) << (sizeof(unsigned long) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; } - result = PyObject_Call(from_bytes, arg_tuple, kwds); - limited_bad: - Py_XDECREF(kwds); - Py_XDECREF(arg_tuple); - Py_XDECREF(order_str); - Py_XDECREF(py_bytes); - Py_XDECREF(from_bytes); - return result; + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); #endif + if (unlikely(ret)) + return (unsigned long) -1; + return val; } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned long"); + return (unsigned long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned long"); + return (unsigned long) -1; } /* CIntFromPy */ - static CYTHON_INLINE uint16_t __Pyx_PyInt_As_uint16_t(PyObject *x) { + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0; + const long neg_one = (long) -1, const_zero = (long) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if ((sizeof(uint16_t) < sizeof(long))) { - __PYX_VERIFY_RETURN_INT(uint16_t, long, PyInt_AS_LONG(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 (uint16_t) val; + return (long) val; } } #endif if (unlikely(!PyLong_Check(x))) { - uint16_t val; + long val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (uint16_t) -1; - val = __Pyx_PyInt_As_uint16_t(tmp); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); Py_DECREF(tmp); return val; } @@ -44395,35 +49942,35 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, if (unlikely(__Pyx_PyLong_IsNeg(x))) { goto raise_neg_overflow; } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(uint16_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if ((8 * sizeof(uint16_t) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(uint16_t) >= 2 * PyLong_SHIFT)) { - return (uint16_t) (((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])); + __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(uint16_t) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(uint16_t) >= 3 * PyLong_SHIFT)) { - return (uint16_t) (((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])); + __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(uint16_t) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, 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(uint16_t) >= 4 * PyLong_SHIFT)) { - return (uint16_t) (((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])); + __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; @@ -44438,93 +49985,93 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) - return (uint16_t) -1; + return (long) -1; if (unlikely(result == 1)) goto raise_neg_overflow; } #endif - if ((sizeof(uint16_t) <= sizeof(unsigned long))) { - __PYX_VERIFY_RETURN_INT_EXC(uint16_t, unsigned long, PyLong_AsUnsignedLong(x)) + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(uint16_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } 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 if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(uint16_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if ((8 * sizeof(uint16_t) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(uint16_t) - 1 > 2 * PyLong_SHIFT)) { - return (uint16_t) (((uint16_t)-1)*(((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); + __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(uint16_t) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(uint16_t) - 1 > 2 * PyLong_SHIFT)) { - return (uint16_t) ((((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); + __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(uint16_t) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(uint16_t) - 1 > 3 * PyLong_SHIFT)) { - return (uint16_t) (((uint16_t)-1)*(((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); + __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(uint16_t) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(uint16_t) - 1 > 3 * PyLong_SHIFT)) { - return (uint16_t) ((((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); + __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(uint16_t) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, 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(uint16_t) - 1 > 4 * PyLong_SHIFT)) { - return (uint16_t) (((uint16_t)-1)*(((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); + __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(uint16_t) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(uint16_t, 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(uint16_t) - 1 > 4 * PyLong_SHIFT)) { - return (uint16_t) ((((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); + __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(uint16_t) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(uint16_t, long, PyLong_AsLong(x)) + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(uint16_t) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(uint16_t, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { - uint16_t val; + long val; int ret = -1; #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API Py_ssize_t bytes_copied = PyLong_AsNativeBytes( @@ -44550,14 +50097,14 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, v = __Pyx_NewRef(x); } else { v = PyNumber_Long(x); - if (unlikely(!v)) return (uint16_t) -1; + if (unlikely(!v)) return (long) -1; assert(PyLong_CheckExact(v)); } { int result = PyObject_RichCompareBool(v, Py_False, Py_LT); if (unlikely(result < 0)) { Py_DECREF(v); - return (uint16_t) -1; + return (long) -1; } is_negative = result == 1; } @@ -44568,15 +50115,15 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, stepval = PyNumber_Invert(v); Py_DECREF(v); if (unlikely(!stepval)) - return (uint16_t) -1; + return (long) -1; } else { stepval = v; } v = NULL; - val = (uint16_t) 0; + val = (long) 0; mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(uint16_t) * 8 - chunk_size; bits += chunk_size) { + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { PyObject *tmp, *digit; long idigit; digit = PyNumber_And(stepval, mask); @@ -44584,7 +50131,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, idigit = PyLong_AsLong(digit); Py_DECREF(digit); if (unlikely(idigit < 0)) goto done; - val |= ((uint16_t) idigit) << bits; + val |= ((long) idigit) << bits; tmp = PyNumber_Rshift(stepval, shift); if (unlikely(!tmp)) goto done; Py_DECREF(stepval); stepval = tmp; @@ -44594,13 +50141,13 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { long idigit = PyLong_AsLong(stepval); if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(uint16_t) * 8) - bits - (is_unsigned ? 0 : 1); + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); if (unlikely(idigit >= (1L << remaining_bits))) goto raise_overflow; - val |= ((uint16_t) idigit) << bits; + val |= ((long) idigit) << bits; } if (!is_unsigned) { - if (unlikely(val & (((uint16_t) 1) << (sizeof(uint16_t) * 8 - 1)))) + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) goto raise_overflow; if (is_negative) val = ~val; @@ -44612,116 +50159,45 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, Py_XDECREF(stepval); #endif if (unlikely(ret)) - return (uint16_t) -1; + return (long) -1; return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, - "value too large to convert to uint16_t"); - return (uint16_t) -1; + "value too large to convert to long"); + return (long) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to uint16_t"); - return (uint16_t) -1; -} - -/* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_short(unsigned short value) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const unsigned short neg_one = (unsigned short) -1, const_zero = (unsigned short) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(unsigned short) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(unsigned short) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(unsigned short) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned short) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - unsigned char *bytes = (unsigned char *)&value; -#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 - if (is_unsigned) { - return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); - } else { - return PyLong_FromNativeBytes(bytes, sizeof(value), -1); - } -#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 - int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(unsigned short), - little, !is_unsigned); -#else - int one = 1; int little = (int)*(unsigned char *)&one; - PyObject *from_bytes, *result = NULL; - PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; - from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); - if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned short)); - if (!py_bytes) goto limited_bad; - order_str = PyUnicode_FromString(little ? "little" : "big"); - if (!order_str) goto limited_bad; - arg_tuple = PyTuple_Pack(2, py_bytes, order_str); - if (!arg_tuple) goto limited_bad; - if (!is_unsigned) { - kwds = PyDict_New(); - if (!kwds) goto limited_bad; - if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; - } - result = PyObject_Call(from_bytes, arg_tuple, kwds); - limited_bad: - Py_XDECREF(kwds); - Py_XDECREF(arg_tuple); - Py_XDECREF(order_str); - Py_XDECREF(py_bytes); - Py_XDECREF(from_bytes); - return result; -#endif - } + "can't convert negative value to long"); + return (long) -1; } /* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char value) { + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 0; + const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG) -1, const_zero = (unsigned PY_LONG_LONG) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; if (is_unsigned) { - if (sizeof(unsigned char) < sizeof(long)) { + if (sizeof(unsigned PY_LONG_LONG) < sizeof(long)) { return PyInt_FromLong((long) value); - } else if (sizeof(unsigned char) <= sizeof(unsigned long)) { + } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned long)) { return PyLong_FromUnsignedLong((unsigned long) value); #ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG)) { + } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG)) { return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif } } else { - if (sizeof(unsigned char) <= sizeof(long)) { + if (sizeof(unsigned PY_LONG_LONG) <= sizeof(long)) { return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned char) <= sizeof(PY_LONG_LONG)) { + } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(PY_LONG_LONG)) { return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } @@ -44736,7 +50212,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, } #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(unsigned char), + return _PyLong_FromByteArray(bytes, sizeof(unsigned PY_LONG_LONG), little, !is_unsigned); #else int one = 1; int little = (int)*(unsigned char *)&one; @@ -44744,7 +50220,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned char)); + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned PY_LONG_LONG)); if (!py_bytes) goto limited_bad; order_str = PyUnicode_FromString(little ? "little" : "big"); if (!order_str) goto limited_bad; @@ -44768,372 +50244,105 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, } /* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(unsigned long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(unsigned long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(unsigned long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - unsigned char *bytes = (unsigned char *)&value; -#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 - if (is_unsigned) { - return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); - } else { - return PyLong_FromNativeBytes(bytes, sizeof(value), -1); - } -#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 - int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(unsigned long), - little, !is_unsigned); -#else - int one = 1; int little = (int)*(unsigned char *)&one; - PyObject *from_bytes, *result = NULL; - PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; - from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); - if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned long)); - if (!py_bytes) goto limited_bad; - order_str = PyUnicode_FromString(little ? "little" : "big"); - if (!order_str) goto limited_bad; - arg_tuple = PyTuple_Pack(2, py_bytes, order_str); - if (!arg_tuple) goto limited_bad; - if (!is_unsigned) { - kwds = PyDict_New(); - if (!kwds) goto limited_bad; - if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; - } - result = PyObject_Call(from_bytes, arg_tuple, kwds); - limited_bad: - Py_XDECREF(kwds); - Py_XDECREF(arg_tuple); - Py_XDECREF(order_str); - Py_XDECREF(py_bytes); - Py_XDECREF(from_bytes); - return result; -#endif - } -} - -/* CIntFromPy */ - static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const int neg_one = (int) -1, const_zero = (int) 0; + const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif 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; - } - } -#endif - if (unlikely(!PyLong_Check(x))) { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - if (unlikely(__Pyx_PyLong_IsNeg(x))) { - goto raise_neg_overflow; - } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_DigitCount(x)) { - 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 && PY_VERSION_HEX < 0x030C00A7 - 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 - if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_SignedDigitCount(x)) { - 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; - } - } + if (is_unsigned) { + if (sizeof(uint16_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(uint16_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif - if ((sizeof(int) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) + } + } else { + if (sizeof(uint16_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG - } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } } { - int val; - int ret = -1; -#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API - Py_ssize_t bytes_copied = PyLong_AsNativeBytes( - x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); - if (unlikely(bytes_copied == -1)) { - } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { - goto raise_overflow; + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); } else { - ret = 0; + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); } -#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - ret = _PyLong_AsByteArray((PyLongObject *)x, - bytes, sizeof(val), - is_little, !is_unsigned); +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(uint16_t), + little, !is_unsigned); #else - PyObject *v; - PyObject *stepval = NULL, *mask = NULL, *shift = NULL; - int bits, remaining_bits, is_negative = 0; - int chunk_size = (sizeof(long) < 8) ? 30 : 62; - if (likely(PyLong_CheckExact(x))) { - v = __Pyx_NewRef(x); - } else { - v = PyNumber_Long(x); - if (unlikely(!v)) return (int) -1; - assert(PyLong_CheckExact(v)); - } - { - int result = PyObject_RichCompareBool(v, Py_False, Py_LT); - if (unlikely(result < 0)) { - Py_DECREF(v); - return (int) -1; - } - is_negative = result == 1; - } - if (is_unsigned && unlikely(is_negative)) { - Py_DECREF(v); - goto raise_neg_overflow; - } else if (is_negative) { - stepval = PyNumber_Invert(v); - Py_DECREF(v); - if (unlikely(!stepval)) - return (int) -1; - } else { - stepval = v; - } - v = NULL; - val = (int) 0; - mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; - shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { - PyObject *tmp, *digit; - long idigit; - digit = PyNumber_And(stepval, mask); - if (unlikely(!digit)) goto done; - idigit = PyLong_AsLong(digit); - Py_DECREF(digit); - if (unlikely(idigit < 0)) goto done; - val |= ((int) idigit) << bits; - tmp = PyNumber_Rshift(stepval, shift); - if (unlikely(!tmp)) goto done; - Py_DECREF(stepval); stepval = tmp; - } - Py_DECREF(shift); shift = NULL; - Py_DECREF(mask); mask = NULL; - { - long idigit = PyLong_AsLong(stepval); - if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); - if (unlikely(idigit >= (1L << remaining_bits))) - goto raise_overflow; - val |= ((int) idigit) << bits; - } + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint16_t)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; if (!is_unsigned) { - if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) - goto raise_overflow; - if (is_negative) - val = ~val; + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; } - ret = 0; - done: - Py_XDECREF(shift); - Py_XDECREF(mask); - Py_XDECREF(stepval); + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; #endif - if (unlikely(ret)) - return (int) -1; - 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) { + static CYTHON_INLINE uint16_t __Pyx_PyInt_As_uint16_t(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const long neg_one = (long) -1, const_zero = (long) 0; + const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif 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)) + if ((sizeof(uint16_t) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(uint16_t, 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; + return (uint16_t) val; } } #endif if (unlikely(!PyLong_Check(x))) { - long val; + uint16_t val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); + if (!tmp) return (uint16_t) -1; + val = __Pyx_PyInt_As_uint16_t(tmp); Py_DECREF(tmp); return val; } @@ -45142,35 +50351,35 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, if (unlikely(__Pyx_PyLong_IsNeg(x))) { goto raise_neg_overflow; } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + __PYX_VERIFY_RETURN_INT(uint16_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) > 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])); + __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint16_t) >= 2 * PyLong_SHIFT)) { + return (uint16_t) (((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])); } } break; case 3: - if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) > 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])); + __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint16_t) >= 3 * PyLong_SHIFT)) { + return (uint16_t) (((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])); } } break; case 4: - if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) > 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])); + __PYX_VERIFY_RETURN_INT(uint16_t, 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(uint16_t) >= 4 * PyLong_SHIFT)) { + return (uint16_t) (((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])); } } break; @@ -45185,93 +50394,93 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) - return (long) -1; + return (uint16_t) -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)) + if ((sizeof(uint16_t) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(uint16_t, 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)) + } else if ((sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(uint16_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + __PYX_VERIFY_RETURN_INT(uint16_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) - 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]))); + __PYX_VERIFY_RETURN_INT(uint16_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint16_t) - 1 > 2 * PyLong_SHIFT)) { + return (uint16_t) (((uint16_t)-1)*(((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); } } break; case 2: - if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) > 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]))); + __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint16_t) - 1 > 2 * PyLong_SHIFT)) { + return (uint16_t) ((((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); } } break; case -3: - if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) - 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]))); + __PYX_VERIFY_RETURN_INT(uint16_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint16_t) - 1 > 3 * PyLong_SHIFT)) { + return (uint16_t) (((uint16_t)-1)*(((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); } } break; case 3: - if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) > 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]))); + __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint16_t) - 1 > 3 * PyLong_SHIFT)) { + return (uint16_t) ((((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); } } break; case -4: - if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) - 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]))); + __PYX_VERIFY_RETURN_INT(uint16_t, 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(uint16_t) - 1 > 4 * PyLong_SHIFT)) { + return (uint16_t) (((uint16_t)-1)*(((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); } } break; case 4: - if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(uint16_t) > 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]))); + __PYX_VERIFY_RETURN_INT(uint16_t, 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(uint16_t) - 1 > 4 * PyLong_SHIFT)) { + return (uint16_t) ((((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]))); } } break; } } #endif - if ((sizeof(long) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) + if ((sizeof(uint16_t) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(uint16_t, 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)) + } else if ((sizeof(uint16_t) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(uint16_t, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { - long val; + uint16_t val; int ret = -1; #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API Py_ssize_t bytes_copied = PyLong_AsNativeBytes( @@ -45297,14 +50506,14 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, v = __Pyx_NewRef(x); } else { v = PyNumber_Long(x); - if (unlikely(!v)) return (long) -1; + if (unlikely(!v)) return (uint16_t) -1; assert(PyLong_CheckExact(v)); } { int result = PyObject_RichCompareBool(v, Py_False, Py_LT); if (unlikely(result < 0)) { Py_DECREF(v); - return (long) -1; + return (uint16_t) -1; } is_negative = result == 1; } @@ -45315,15 +50524,15 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, stepval = PyNumber_Invert(v); Py_DECREF(v); if (unlikely(!stepval)) - return (long) -1; + return (uint16_t) -1; } else { stepval = v; } v = NULL; - val = (long) 0; + val = (uint16_t) 0; mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + for (bits = 0; bits < (int) sizeof(uint16_t) * 8 - chunk_size; bits += chunk_size) { PyObject *tmp, *digit; long idigit; digit = PyNumber_And(stepval, mask); @@ -45331,7 +50540,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, idigit = PyLong_AsLong(digit); Py_DECREF(digit); if (unlikely(idigit < 0)) goto done; - val |= ((long) idigit) << bits; + val |= ((uint16_t) idigit) << bits; tmp = PyNumber_Rshift(stepval, shift); if (unlikely(!tmp)) goto done; Py_DECREF(stepval); stepval = tmp; @@ -45341,13 +50550,13 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { long idigit = PyLong_AsLong(stepval); if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + remaining_bits = ((int) sizeof(uint16_t) * 8) - bits - (is_unsigned ? 0 : 1); if (unlikely(idigit >= (1L << remaining_bits))) goto raise_overflow; - val |= ((long) idigit) << bits; + val |= ((uint16_t) idigit) << bits; } if (!is_unsigned) { - if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + if (unlikely(val & (((uint16_t) 1) << (sizeof(uint16_t) * 8 - 1)))) goto raise_overflow; if (is_negative) val = ~val; @@ -45359,45 +50568,45 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, Py_XDECREF(stepval); #endif if (unlikely(ret)) - return (long) -1; + return (uint16_t) -1; return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; + "value too large to convert to uint16_t"); + return (uint16_t) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; + "can't convert negative value to uint16_t"); + return (uint16_t) -1; } /* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_short(unsigned short value) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const int neg_one = (int) -1, const_zero = (int) 0; + const unsigned short neg_one = (unsigned short) -1, const_zero = (unsigned short) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; if (is_unsigned) { - if (sizeof(int) < sizeof(long)) { + if (sizeof(unsigned short) < sizeof(long)) { return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(unsigned long)) { + } else if (sizeof(unsigned short) <= sizeof(unsigned long)) { return PyLong_FromUnsignedLong((unsigned long) value); #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + } else if (sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG)) { return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif } } else { - if (sizeof(int) <= sizeof(long)) { + if (sizeof(unsigned short) <= sizeof(long)) { return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + } else if (sizeof(unsigned short) <= sizeof(PY_LONG_LONG)) { return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } @@ -45412,7 +50621,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, } #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(int), + return _PyLong_FromByteArray(bytes, sizeof(unsigned short), little, !is_unsigned); #else int one = 1; int little = (int)*(unsigned char *)&one; @@ -45420,7 +50629,149 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int)); + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned short)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned char) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned char) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned char) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned char) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(unsigned char), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned char)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(unsigned long), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned long)); if (!py_bytes) goto limited_bad; order_str = PyUnicode_FromString(little ? "little" : "big"); if (!order_str) goto limited_bad; @@ -45514,6 +50865,77 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, } } +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + 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 + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + /* CIntFromPy */ static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC @@ -45791,7 +51213,7 @@ __Pyx_PyType_GetName(PyTypeObject* tp) if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { PyErr_Clear(); Py_XDECREF(name); - name = __Pyx_NewRef(__pyx_n_s__29); + name = __Pyx_NewRef(__pyx_n_s__51); } return name; } diff --git a/dataRead.cpython-313-x86_64-linux-gnu.so b/dataRead.cpython-313-x86_64-linux-gnu.so index b7406364cada467b3bba261ecd295d18f11cddb6..6a12ecf904d9294f49d2a0d1116c964c3908b69d 100755 GIT binary patch literal 2289488 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�ivqFjV(FSMPxk{vuA}R&p_($GE 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
H1R?k7_Ugl{*^AvD==+Y`|ar$%1 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
1;Qy#CW)7 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

Btf2V<3RN{U`sN)coJGs?VnZIm zSm|5ce8&O#IFrG^3F!T|qVyG^?t|1JvmyZ7&A z;j&kwXJKep%!Y0*Z_-I2*H-Au1<6Erkf^Ncb-XqAAg*fTUV;$ZG-h9@=T z9H%OjJBCWL#Ckcimv4-)$T5z7To3otipH#Hb%bJ+z*m8MZJQx^xz#V)0;gtc zX3|2;=0?+?aB8Z4Sy{zDnBG4IIq1}g^D#fiw#NT1yI&TC9dhyIz=@==rL$ z5VFmf(hJM4V)uB|KKV1;gYw`~Zei`j?asn1#gHJtYP5H)G`Q9dQh0mk6punbUqIcr zlAEAb8hF4s;vg0_X*-RC$JQd z)F6MK;0#M9ja-mRT1?bOSdrnX5UpPy576^%MyHPSeEnQt z=iH=1_=?tufD~LNY92h%Likb-gZPRIPJ+k~9tXquN!kA}Hyo$YQLN*Cw=%$BXXco% zxLovpimvvA_dN^;m}$BKEIJRU^OTK+YIo8|(zEWQ(ZW6Mq$yw}#qXLyyAGEk@VjOu ztx)aNL>X>)W&5rfW|Lk{8Nu+P$7_rC8E+QcGlZ{~SRr^3P{!bKWX`FbO{_e5FdE;G zbM+BjG|sHZ0FaTSLe&*EKd6X&{rs%sHa^wul{duC-`guV)cI6};^3OG0sm;gvs`n; zVBiojZ=V%7pOd(Kc&`K?A!wwS!=(lZ?*=Qdg|*b?5o8#GL}>_q z{(e|s%740e(E1v`jg~;>#UNMx(=CCPb2S+sFkHxy8nhe>25SDIRXW_0KpjdH(_QiL z2~HLQg5XHEYg}kS+Q@OgEH2r`x@K|7W?71HFV6sap@nUGIgcs-9ZF-=a=7Z1G*NXuydv;Q;wDz8*#IG_!zsggG`5@mDG)Xhi=7@& z9i?gOI4;LEw*s6phT-)dWWMG1m_;4$e}E@-g<1ZWm85~SB3_2$++G}NlXMmXj1K1v z#mGel4scQg@$(21r#rc%@b$;pU+tR(+0wv0?dFTh-oB#45??zJeau3Y5qpyRezEM? zVNa4y17e*zH!DUSKRwKMV%W*K6dfq+;e^FzwkcC&rz9F)GaX_$p2b789FB+kpD+jU zOa2eVgIZ5|L=wFV;t(d`5nd)?&D`;8*-@|Kc6npx;PvYdCgrc>e(ime)Gbqjs65-k(jrC1jX7J`6 zIIXZ}b|>Hu>-gFqfoX77fs_`sj2F2!fX_7V+Ps3aHgCLjb}c@5x4Fl*J2>7ty%rzB zY#;upW%i#udIW@f^GEwfv_#$ zD!+Jf)hr1Je*_NZH?ju@2?;@n51GIVX(xmnq{tu~3^_-_xsW>+;Z8^_FPVuA9mx}T z;20S?frJU6i!8#T&~+rN3q4>F4)6_UTwW78FxreVFght3grw+G-r^)U2i3s+O9vY@<+1AdNC>2_&%1jqGlcMs~l1>P7NaIhu09$e)L-pBQg0^7BdT z{gbiCPZakPoWL{hsS%CAbTyk1pZ8Zw*z5o{`KJ3~GL!B*L5y4z{1*5F-Qquwo5Aw} z?uY?vMBrHN22(-o3q}Rq;a5_Z<-N@B5ye9f1R*zs6YmBp9)0MY5c8utvr)_F6BdPL ziY2C(=y z5^4ZTsBydou;VqZ)dY5}=FOVGp41#w3t)P!!?i#>T9ZD31lPk9em z+I#y6F1)wB4#258j|k%5PkA3;_4{#k0pjW=)kTD)y1x?pweIPUf!+IfLqlL28qRA9 zY*W+21c#g6Y6{}5rjLm&{iJ_0fYHq|31UBe(j4GP^PMfgva`jL7Q|X4w*;2la&IeO zM_OGVxZY||Yk={sR}k!LeT3jj>vV#w)@h#sZ2jyU!MV>Ke1_-`KFcCDtj*dsz}B|e z+y>a8HaCdfXfx__VBblTGi*r`s_ zI|EGbystBe*E;w88ldmj!@dS_*w<%>o%uSp3$W2$CK4>@a-X1I*MVID#&u00SlIO- z!S$}`1hL(cx&e&sHi00u+a`kT-F6Y2@0QRVV0QO;1RJ_xAwgF6-aP=4drSww z{6hXi$GWeCY(Tu#Y`yPcOjV5Dc}8-6zMh}P!)0j^efi<9?QzE{)H!@-*@4r4=;4r_ByR-04v@~=N|h1s5vyCjd6>_pti_wrVEpWnXUz5uDiuw8`WB9quM1-Z8+p}T;VuR z$YCC2kKqlM+GQW!SL<|9b0`-EuxERt*wPPYiq54kLddM2Gv36pgLpTCprf6 z4xq>0@BabO{vV9_0O*(x77Fyp2Um$+{a}C?P6srIZvZsD!7_m^Yp|B++6F5cGVY3o zTN@&ytqlh^B09Lyq-H=THJjE9Ow*d(ZAR+dW|^%(&205sD^P!H)xR~c{;em8@p)2f z4A%{{;dA+pTQ}Y;C(e#P+m%Ozd&H-d_Rh{Z-soz~a6dMQqeplZZ|FYCf^~UtJ@1 z?W+gG9(iQ0QNZr$6cSm5m*)g_2$9S$IdCqmbM(VYW4@iB`v0o=({W?wT#K4K277|_9X;~)( zF6*?8*t$-8iS6xllGw>k*97aePJ=oF9n^VfX9N!I{0p&PI;Rm!>%5)V_Rf2V?dhCO zEWPt%Vvjpd`Wo0IOge$h|9W5-U<131>jG?CmqT5F9qM|aE3gY)e9ta%MV=A$!Jr)yN++(NU+1cYUsgHZae*oz ze{T3E&<+1g_?BqGx0}BOy7}83--36?w+DzF`1TyJbKg$w32bW5B|U*H>A8*Aww}9* z?e4jc*uI|UiJk8`tQW9hy~g$eHn!J%V)J{Y5=-s1me|@}yNK=Tb(YxKUYCen>UEXa z)n1Q?J?a(z9kBTChJOca_;(q^GQPV@?Cy8{aP5oH@B2Yqq73>zg;>h>^NG#>ej~As z-)|$f?fad?c7Bf;Z41vCt$1sV(|dEhtFH(q3uo74*JR!yD?7CX{?^2OtZ;Gt5h&aK zQ_hlkx2(DIXWlg__i=OdojC~Lp zJh8}{2QMW;w*?#*=y9yQki@8E8+I&qKNWvC>B1 zNPN~5fn0zwkSj1yGeZ}I5nT{=8t;G_r^5${ubJK}5GQW>jC(QbMVMmNi#uK>S8Czy zg$cJ8UQ-0*HAOOu5zQ<%p*SK>D4tnTpjgcTofiGHEYYWB`;-H7pK@m^5Is}jR7HfI zswmfZ!>W?}XVnp}5srB6{%g2{=l*Mdz9!bVf4(-n8t~!O_Poj9J#U_VlXAY9A<&FB zvxsKBIaZ94W2?`o4s=HKG=W~LexK<5>alMzZo*sR1)TNP0|6hr)vpEw>sMo~7*p5Q z+Eokau3BTnm^$XY>F)uZ{$8p;Q{P)pbp3nV>M*TsbeYE~>k)E-GeU-SYxHU-v1|r*#+91JiYX7P_hHh9L>GU!Pry?jUKjBChrK^SaPN=OghM>-qY?Fij;KGj3Ax8MIrtCE zOAr2Ia0{Y?Ta0Rf97eS`!^O>+7H3<)*LAiW|Mv3K*aX z*SFcjb;_PLR|R^t&Am3LoO^BlY-3hdo3ZT#d%Ki&pr^E((N553v`cG;Xld<^e#PLU z9DM7G!IvmUUr0OC8g4nj0v*?3Ne9GP(ji3*rSma{l35I*%`u2B>qK-J$IIpzFE4f` zda*M`y5<<^R&l^v_4TeUr0(i+ybGwuyR7X>bZysNU4icEI=LIs$=&90l$+P>l0YwY z>)#!r{W01JU(84jbj>l)ZRt+#EgajhY192;cWCV*hd3MuQ9~TYw)z;`GQS~j<~L(F zV2#1JMRdbIPZ2%!&&fSSzCAHUwJ^sh+;h`&J+bv1qgt6`R10&A!o8q9lZ9_1nS%yO zhtYxwh~c7zIb0xFy1?q2{ts~o-0m!MbZKT6E;?`3p=(UpJ6Gb*{0@s2@4xvdx^Z*J z_zRi;n~DFoqG?^csH&breWCZER==IjejArXI4_HS`!f6O=J1kg{dRNo+vci*zFvgd z9X9TdK;6+#N;n||-7s#Z4&5Q%AWe?GbD8!y4A)&lFeJXGTrn0&zlt1%(*8 zpwQ`;fu4SOP;sL7ipP~8j4P2<0+F&xXx%V8DA5;QW$1-hGhc;$WWKtz95P&5Zdp0l z@3L|yh@B{xS&lrJ<*t+mdZoP9Rm0Dsy6WUAhjmH zT3-IzqH3Tns&=m$dBv&*Z&$p2TJ+cKw;?&ZZH8uHbptdWiyNY8)i)5`P<^jJ_f|hi z^knsG0*!quL3G>W-b81uqC-ylaIt{^*|pXk~81Gobx)?n~tVGRaMEWzL! zYOwkrz&%W_=sFG}@dH9rp?J*a-czjkeNif|Zu+zGs--^&ZiiU&X45IrQdw3ggCC+XcFv zy*T_?U-jc+sUOx%Wa6R;Wys`WsRWC5y>Nv8a zDACA{^R2$#axck+5>`lPLTWLT*$J^SJKgUjV%_gF=xgRYh^w6X==(2-Uj9PY3@&9d zxT0x=70m$AyANPz-yEI&Mys>e)+Q~?wF&CK$3w9idC1iWR#9Ayz)HVaBYO2UT$MD( zs$`7l)yMoZjlFsrI(JHO>YopYK2V)JRv`7!yPp>w$@!j_d!pH0?s=;xlDO5gcQ2t> zEcRt9yl3d{?}z8P5)Nur;;vtpP!24 zG+|EuoD>-&myhGgAPury{}!h<`Ym;Ts^tuUDO6>FNlVZ*{e9mY!_@pYQ8qk?)g>^D+>3%kc#J?@1k zivc$|B7>gTjEGZsTf;b&f0Gz@H%0A_0`LB)q5Pc1&=-r&U0!N| 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≷B^{w!b?BZ44f_s9lcdn?cN_L{Nn7N-iK;(BkH2Wx zM+J4LZXq^U^L%*CL{5JVOG)|^uiM6r&k`X$2j@MDHOLDF6dhNxJ1!w#frlCo6iVZ%<7 zH24;y>h~0Y!1Y@p!S8{p!J0v|8KGMx8TL(*ZbA#plP0zEj7E*#EpQ1MWUevkfY}D{ zmjaiiKIUk=MQcHn2wlv<1wjZgP>9OX2mdnck&;%0-h96Rgd&fo$Kb45FJss%zSR8=G5Mtpn_B2JD!8O!Pm{DkfofFudBc8NSR_#>jWTXB z>}-Ls2uPGv&ahuBsvnd>b?&2Q(aCxh(@-j9l%Ps2Xr9^GLkDmoDs^h{rn6X zOW#B5)DXlbKOR+vK3+le6V73zb98~|5={p4aY7ZKz$%M&TIVdfVqLeWB`-4C>BTkQ zFn!zx4}K#{SE5D98B`8UtfxR8RGMLrmNZcYzhMc@gQz6x{g9;7@HYLxG`pmxKpjJ> zE0Xq8q$p+L$Gp9@ey*1S8C1MtJY?b9QHI@LNN~z9+C%+PF|Gs_d6M>0xDslpw9faC zjjoZmK|jKvw146~HtKW=MM@doKW%c;nf70zcVs+=-)s=x;M202R}q@1bU>?e8p%K( z>*S$+o(1SpG1%5{Kfti06muL=OjWW?5Kjhbme**AelWMUEXi;ojV7)qK-I!yOH1wDVW=GMxjuAcpP+X@2ROUKPcK-vg$ zGu{0-^opdzRI#>Ue^psCamUE^l1`^$#i&FD!|ozbn9|ayDD=Q;f!tEtBrT(32n0Eb|AG z_Ir-tbsI=dO&ViPL@nkB@+iG}HUX%QmY0a!M&lK-qN;vCd8&u1-y&&<3Dvqo(rzt2 zR87;T(@Xy_?1qvK({pbd_FpAkl%8vXAzsp{^b|IDej@2~DqWh&SE9;z&Cdl5(@i%~ zsj^i57Q@~nXi2I9^Wm_h)2S>f>$s%DRH7Q5Rb9*G(!V2Vm;QZ8yY$y2U7l(-FzlpT zb@_CvP|L83NIFcVA>{%|yYy=$?b2_Mv`hc$pESRyJd%#eBWYKjvyz5MmSWge4P8Ey zCYbZ_i~0nK&{%U8kP?DmsDnQJlcdve?Cda5)Dk32ot6H1P!PAw^O8=drdcTRvH)TF z>?^~5U(#i%7Ji6-Nm`AsRiW1tAn4O8aU_9M!%n_Uze_s(^>vsck`B|ee>3dzlCDEf z^n?t@1hAtl_)e`z%Z35Lrcx205=P0z)IZ=WKSHDYvuwu zDah-z#>97VfAnnk&@oSMiw0Qu?x3AoOTTIwo%dYE8&wpfD)oljg*tggcxakucS2qe zhZGt1&q5ofue;%SPHoLDmAi8BQdIU9YToL1a$r;lJ%W)jXV@%hBIiE3zq_f%eHv`e zG-;=293;NAj($Wk_3(TPsqT(L26?6fc|wqM+HW2$VSM!TEH^&>|2ICpss!_Y_{j9uQJqE324(h9~t&~NtdM$+k(qh0W#^+=7yaw z>8e!w{`hoQrQfNipMv^81^-*p&(nKNX_(m?H4p<+DHWp>Jb_V*;8uF*S!#~=J!j%K zJM1})x0@-ssTgE%kTbpq{j+%#!o_k3a97jt9*NTW>?U_;p5^Fqe0$3L4h3Q$(c_H_ zyO=zwsQ)CsEoUX zs3MLw?*)p71X0BTI;ioGU873maRhpGB^K~%9r1RqHvh+^%8s3J}fhoj5xCWtDw zf%X;zQEa>rRivdbq78exAgb6rf}1@NM6p~Usz{S*At-(pL=_vOjO+vu#m)&)MH)yr z_RGE|h$_~Dh8F};?54Z)Z%~oiQ6Es07ep1iYIP|HqS$>xRFO_wEkW^^AenR!69VW? zK_ZlA{RE_&AXRCRwE@UzK_c|6H3!HXL8{VdYch}xf<&mB z)gQ<~L8{VRb2VDz6+t32(wq*Y={@@8p`c*w(OmusF$A3H>2pS z_i9?AeOpy$#d@I$h3w0+MnY7ScXVOXQ8tUjBfg^O(x(K9$Aepq) z+6knqAQ9SVZ3WV#zJ3aNvX4U5>9*Q*=bg08ljos>FiPnJ)D7HWZ7u3z4Md3?DN%=Z zcn)~zC_FN>*4k*%cIyZTCJR9-6|Y3AJ)1rBGwgesZ~bV|Dr*~PE(=X2*bV|>+^+?R zPs>b+USa@HZjE&*Zs?))0J9%aBP+JwE{n3lgD)o?Ia7rBnvBGgWma+n&m(+G3DChB5A=?jCDCuO1R4kB2Ydj+P5qjYx`hpcx zohLMp05v?p(g_fI&{KcWL^#>S+-uT7^B0p&o4=W~$FmZx^6x_MFfH?JL5th?q%M+5 zMKL{?EEG>ro|y%TwSv^3#pWhF`X@nLf687-qf@~76-!&>6s1X+_!a;`RJoCUFlw?c zy)e;)>9*Un%RHs=As!fhd*EC1bj4VeKo2WFMpqx2I>)5BpoOB7;ribG=bZa3#L~{{8jNm-r_pmlVt7ZX@aVe_U0M3Dz zG&IV@hf1$E?1nv6Xd?8hryr2{g7_)l(*;PrAd^j)1fvKRZCB{6%Ys{U$jTxb>5M~9 zE(l}U@o!p?B6L<+nokIFGi`$TPh0IC4&^&n9a`@F1%B=4grF3yvpYDnz`GCdtxYs1 zKOMrn-LUHlQkjmLEm6Vu2vUwtpu59%c~zIXjRvbpW(aHLK1?Bh1IaymOS-8qFv#8?pM+cEtjreBR;0Bd~FS@KqqbL;|z9aw6g)+E=h^o@pY>6M4Rp1SPgKxAg}1_TKEi_O+SNw z|2H)PMNyjm-3zVdW1%WTchskk@yt2a0*m^pDfYi4m#9`f`UiX%O$D;ZvQ)J+6Ud;6 z)>I4AY@U5*3+$nACY7mA`K*bCsJU5uX65>c#MP0WCWQ_9Nv)s`drM1?b(^*x8tUES zrAdK30s0}hK8f~(u7_xS$`R<$=|XuY&GW87FK_U+F8d}F%>q9S2~Nbk>P3Mw=^KAv zXrNaFiBKzl4mcP861S|0ijViDm8O%8PeZaxB{F89~(Ax8FxQ zg42>{b<(fU_=yC&J+%A3QFWv)gg!C?ttLezEKOBvP_4TRyV^Ti=nSaeUWC?;Fr7FU z2-FAaT?iwzfE)UH#KoaKBar3Bd4}CWiabP9X*qYJ9yU#NHlnf?OI{^v1zUyI(g~X; z_*SBRk4l~a-IZ_IAO2kn8K6)DBQ9-I2-Al%Qs8wIfbBEUf5=Y@0$Z>E=zmw2WxvHm zi{|>*qb(#0%v0mD7R~UlN`NiE?7=7}gqdh>!$EViAQ9@|9}MI!LGTRKXzB|B--v27 z!#~h+6rmPuA1xH1Hr1{}^2M#?+Fr7lYZF7pU0j-DXR93f5#w>7Vt<~J$53mDV+2yk8eX3VX(}ui+UGgLVa8VAe{IFun32mchQ#6d1XG=4tF{6KD@2XWV0ZM^-Up4rm|IF9!i?0ggLMhJinqo65+1kKDn8G+hhvYrMehg8#UJu zg2wz*yf)o2%%og4)pF?wQI3=6rS|@X0h%1l4bsA-gBV0QNTITDSdD}UX^-*Jdfy%& z{TAqpwtiUxklM(Ne}eU9_u>M56&5f&N{hX+UPy(rJ?@Gewym<7JzktSNJh-K0p@& zLm}am7Fr&{Y3uOycY`zuAT;BzLIh_+ChW_r9=b+@ZJL5_(9%v0rZLZmE9yi#YP!J3m-uf+FnV^4LYw42JYP-%MBNd)ZwsPx# zttsxLFSundlp^YfOirUR573jCFwQeEuWQdH{4DBcBN7P4V^$zL3BTp65alN4CsTIH zLZ1Q0ZI9DFtfO=azS)C;%s$unaf=OG<_73&)&Gpej z|2A$U{emwwW}>KND{?R}hH*7=7>m$xm$qypr5!&e-hYfR=An?+nD3&_}sYw%@`Jjm*XoBDpOS^0TeWgSOb$5oL!~{X= z(p}HtgV>jC>f}swXp^(wp{w3+eAL?C+K=C5te-9h+oS$+rAP!bhHQr>I}5=n9(Iw_ zLYPWp?3rl82LvJd&b!QuZm`b>`w52i8vhnQjSkKa(uUyA_!$#PCo}09CY^#8zqP%t zt_b~TZv^88amWySs~OXFL2A=<|F8fZ5A+1ve+caU_|xH>;Xg8x5Z?o(j@flrPY(~m zJlP4EFWF&ugs^CxZ}RH=kMJgK?v2U(Yx`GMP<-ML)|r3IMtp= zOh15h6Uj$a!Y?_Qy|ep02R-l`@fz$b$*+pIwh<71zaWSdc?*%5@QS!{L*>E`kdTJz zX)O8W;mVm04%vdFQsehvF|;?~5^Rt8rDp;MfUw&(Mnly2dE^Y`dXs_(=&6fEnlUEr zfDa`x=VrJK@_K5a5FXmyLph$4Xg4=TYhqIFzCcx4r$VX!CPs(LS1ORoYRk(ySUVW_O$6kFh zBB3x@Ucs*5?cf=sQExOy1!{!)>PO>^?xM!e(!c(V<{5`p#k4nD(y;h2LjGtjVNC!f zvD~x9L%E*Wc(-qb$ko+#VEMT}XevF8mBq~dI*n#i3AUJ|;U+(AqV2(Tw$QVe?a{;B z@bMiA`voDwkW)t4Qt&3ngXQUz@{f&-17YHPXU@YrCxED@#c@Qz@-!d2KHz#6P<8n) zJEC9$hCW|;fEHfSJc9R0fOuFD5`?Ifp^rbKFQKaw;Ez8;S0AW3!EcXA$azTzAvD~= z)6LnK44@Cj=NUS0I_Hf=o;^tO@x!N&^_XeaH2ez50%Mv{8cuXf+9o1Qfc8-c$nNW+6;Fs8-`2zhOQbde(E=py^9T05N_IIcE2w2|$Ke%_H@TIgNn zrIs*(X}f>BpIRk-gI4grm5iq+Jn1SH1e_(ze-N{73tM55h~lT?u*YeGz1OCr92Gy= zne4#a0_iWlmVTP$p9T8jIl4Yl>8*cJA4EaZb&KmVmV@Okj`X{3;dAl!-BN)SsVmGy zT4S%VX{NK)p>f{tA%?GmkLLT<`e>W)u#bBBNBC)+f1w|y<7Ph{@L%v#yI|KKO%KjP z%@yMI|IP^0JgbKViRQ9I6TA>+5zEn+MOe%t9L9UUCa;kKV{Ht3&QOu-oxKhn@E-Nj zw7|>&%@3>#(B{D2038jS3{cqT%Qe@igQTa31X5 zp}Hs(BZP>hkwm(RA5gMZ&U0r_AbS%)pN0H;9Iq0JZ z9gv(b-TN@&VC6*&EZ`i4p7#6*Ly+bXX1Ci3v05ChRcnNnIZPE0LK=eE=IUvsVmDd) zp%v=HgXIyIatz>$aUfLe7|%>}{R9vy_KP?osMr-MT4kVsP@g3ch1V7(6F_tw?Z0L1uGUWzAEbC`N|z5uE8MMpLTru(ex3WBuFNll-~h)RFDYuRl%=+6C{&*D%<*X zL3k!I1f@O~q#~@TWBAQm2vQQ^XZwJB^PPS=Y7z72iINUcOrem*9ekHoe3xB+jRwr&^KzZeoT-|tWj{# zWg|f%)SX5Hc~g*5bVLPZd?-kSc3Z#Vcg>!ppN^Qz%2e}Sdicpg=v{@;yWsp7D8EYv zjpB*SPo7_}>_dBrP7u~p)(4IRXjE_%^!^_qjic}|2T!*hyOi9ujV z(n>Zv3*;flX}qpJg9g~s-~@AKIkd|;iXZlyxXNB&u0peor=D+biBe~IyP`RLn?Sv$ z0QDC8RFt}_cL1mt$5BsHkxAF5Xi36!+x^($H&v%Cs#2Re+nu4-#t2BfwsH~w8TLv6 z>(cY@(pDIDv>#E*(4Rcm8`CtSGIRhjlW0n((QxVu3@`0iwq-6@`2?$KvqQVF>PQEj zJRjxzmIY~I(w-1aOCE|<)4xcms&tIM5@9zL#Gr67Dv25VaDmFvGHW-Sz`ir+l#2wm zXpHp(WH=>=LFrIrv9yiIe^{`RZ&NZxIb*th6)a*sjS$aW7WMKC^U-MEI6UBa$ zIFFz3^EhOVQW%{D$;9r9k4+MMwl)<~Pu67KCZe068K^DX2N7IU`7fHd`kw!+Sbf z-53?5;xpjVUV@5uW^2hZu|;P&e&nDa5gMk3yV8PW(nLfJ8+HXjP^T(>yPhDK@QIuS z=X(T+&_44N5Nob})kNWjPph@I8&kxWBx>{whJWD{=Jma7 zjvAT(lNmAH$4s=xDQGe=8Vdy3oVN>2u!g)R)~Df0>@TmWW+_|EJs|o~z>4(t=U6I~ zG)yq;CcM1>1btd>k$$-lz56K^y(DdulSC=7ye|lZUAhQ4!4MJtQJ2Eh1TL6a9Gkep z9Bp9>#w3dtTD;M_rVzR7pkpMBV0*P)?fhcRCQJ>VGVH&hW4p=}TgRWGm)7E);;|x? zqNgGB6GF852$iXURn~Y2zuF2(hv?n(IGKPCEO=2U zRF&>gF3wg0mZDc$&~6nOm?NO7*D`RvCP1iHW0`(jh(7+(u(Ko$?_P*fiz3KOpwegs z2vI%7dk#-ynGrve>2nHUzx&v6tBh(p=!hKU?s)w}cd@7Zj%*^b652dpwxj zAg2HbBQ;BkXTVJ2;G{l+sM+`#s})*r0tmZunh<3~_abc;B$L)SJE2J;un64tdn+ad z>=20|uDXt;U3FhgN^k&G8jD2v#6#W{f(V^MxKbjLgxBM1Q6Y(Os+1(JEJFq;weFV^ynK1d)ZqE zj3**`^a+GBNTCo1Z+wwu!ZDJAg7FzZ0l;c>->V7b`{8HnQE_I)g7B|?zym7M@QS06 zmn}sMv~NnPLe*Qy&O>^uYZ0cEdVOd&HZeKZ?QGR=Q>Qv#o3a}D|ya-MjFznru_T!))MAa9DGS!I) zhlLQD6NXTDvwp6ty=q8$7{-dSOUvR176?IkPtr3l(#x;Hry(d8q$26?5D4UYua8RF zRVC*ojd#RPd`;3=-TbX|8_ZQ;lSF?63@eY*Q!g6!P=Q!d&dNz;leZ?*bVQfX$+V#n8l65hoff2b&M@p)skeE$(kn6)7RSRoH7lZ& zH2Tv&=u(mFRGOZ;9bPR1=8*eh`*_pRmXyh$~#C0Y(;dwXn-2&Hx^J_Mct%7`jeN=G!%vPIv4+vbJzEhLKjVClm zFO|N7?s*NKYy>^*_HdYH%1NDBf!>>9VjedfXjwsd8G)XE35P}rR0+ltTga{QbQsFS1-$cpYTSkj1j!S66k(q*v@3e(+A{!Kp!v#d%5(&*K- zB)>$o8N`rC6lp3n6={$E7+Ta8L15WHu2|Z2_g;(3=UG-P?M`G%v+UNk=FOJo%_1Y_l6N64rvoCB(fbPKU@b)`Z=(A6eirX6o5Fj07h<0= zqRJ5>e$i@)y>%R4)z8U6g~W;w)ql_}!h|@Z?P9EI{`yyJh1`M36e2 z7$dbnI*UnvBajYes)P7V3kb4<1=(TdoA7Ro;OOcZ9%=_yC+zZ#UfSu~>7y);Eo;wf zz+L8FwYaeitYfSBJ0mIP==U>C$ZCSr!E&I9zob2QqX!?xxbn{vD(*mZ`L z%?aK)Uitx(3|it{>7}212Ow3fsD(nxK-~)+*-$v%L?5)~80q%xgB)+sWNQ{8^z8*U zEkke_9l{xCbjtqCrWwvMhfczaNbQvR`!6j1aA~3sKEd-5{j8q9jQvFFsqK6n@d6)< zqz2B@z{=Zv9NR+Cu&^*RR3w#TFwAiPtRZbN9{WLP5!U~z!3MeJ@uNr)fc1Z0XJ z2CY`Ribe`|m{+h{^W)O#uv!z+Fu_aNF==xAQ}Jt76eJUFpVioss!r#Khh5|rAw=B2 zl?&x|uOPK(9z4p_gJTx9C!I;6R>{M$01zWEKrjzQ8cPv3@cRz0mIrf(S_pNNw7a3F znb5xiLvSp|eon&jkmoor{;%~?FaMwILlWAS@fn@5HG9`tUr?d-G&+tG* zLWftdv(={`G}xpQzOH^+?%##iPZivqyx_Y7;{vrUi9THAQhxW=R0?Q#TNz40zpn z(fGI^20io;;vDCBXd8kQ>_Z{V&r6{Ux}_G?szrBVNimjzU4N+lLL9JvC!d4mJ6nA$ z@Y;o^ye!N@RH71&Gj%lcax^i#6;{YCg7|4bcsP)Hf<$N)CJ<-{QeW6x>z$8o+EkF@ zblCX~n|XbUpQpYV_!5!f7OIJ(QtpOVZLgO&NC(|HRo9cBil9ZVlyrm+2RXoM zR~#}exCs-X$J2G0e^G1R0kta(Q7)!-O{0-%>(Xd+WFs~KMV6<>)r9vIUFb%j5eM4M zHKp+&*8VYzU6Hygm6k>NKvTr>a31D^QSiwOEzhlVKHLd!u~b+*Me8ChV}cm)1W6uL zOJpl%gSmo4Xfb3r>;r<}AeYEbK#mFm-*O}u$W=k$ri`qN$SdF(9+4Mp~h?ep{hthgsk7()L z@ET+Z70#szjt$bOv~G|$23vqTF?=!MQ;1kMC!|s1Yb76BmJs!3*qa0?POZ$g zCjI2y2J4L5RE}>1I!8Q#;wu z2>x7AEg{yPL%+cWe_xOQtqbi1(xil@fjm>N9XuYYPyhT1ARq7at6}?=PP8YuhPacK!Gu#3XOFBXW{FCtOz9C3;nwNGljb^1EO{W7H7c=O$ zo7#ZICqm$|7$9jxNkL!yCh5oMY~*5u1{IrKjAj>GQH(}qPQ|%vz9L$N64Wbm7?8A* z8YxL7t6>lk3gtTJSu6)}yB{Wk!-`D=*j+%3f@KS&Axy61-%6v>rlP&a5O-P_OS=y9 zBT^!Rx}*(2iEDz~L3ck#xk^{WPE&SF>y}18rmrsm zyT}7VScC?qj>ROqt{~Xsl!ReoMrcNe2BeNjrHkno!K4rY=M{we;*I}OOxLA>odQF# zNz%X1Z@(@z9HR2ou?ScuM#cN`YSO)bLug(OHqOC_!aQ&rY=W*rR2m(9BjVaU2n(H~ zA~td)j}Uo{wb!zmVNIM0*%sF01fh5uGr4IVoY9eO(Pe8aIPZ`=EHNnRymGoc<_vxc zMyTwg^lV2QDDBJgQ+6OXKx0E$*h`k2!+Xg_6rtlqvQjBK^*}1RWqulMPT!4cs$E{Q z!Nhc~H4w*0_%HiuQ&P_mlqEv{E~l&uQ{N)vi_qL6-BPJ_+Q2lr9_fIhFG*3jLC{Tu z2+6>%%~goPz^<DXD5bQwR$6!Oj&@Vy=*T@63%-0TG zECGZaa=C&Qx(@XY`~)@BUy$b!QI1*uB%WMO3M>!M%;0k9j)_9x;8+O6?%V)bAT$-Q z0@fdgdIyGs_unh(r!BSUyfqrW4||A@&OrD+om11JE(rdljSnKU?Q0;(ygl9r$bJb7)PmSc$9DPw83 zQ&yG|5n7?n9ll$TT2!ww_I+c6#7I6;3^oe8vDW!CIdr~hk!$# zJl3EmpG2(GSexd<)RW&vgMO{gS4<7Qp&29Cj5h&UoIcHjQuy}|?cSTq6N zzj`KkCP-I!Qq|dH zPu{B2t|POtq%q2*<5+mw9ykoSj|(25rc8QnjefEEV~Nw08L85p&)HTy&=R} zf%$xri8!Bx-D0PFr+jqX*B_fA1JeSu82%|55u6>Qp-E$s=ok+rT~M6nhvwsVPM(6F zYTNDli8s+_T{->`v&>mIBbfRz+g=`HxPP9XF8kXCXcq@;UJ3R}qA^KxlV}+<8=XmN6{6m*j4ML4 zDRdx2y^?d1X$lr!;$K^_{#}OOB{G~Jisu#22CKX*)UH4ti*g+sb&@8r6z4F13N1uM zJ2hhU(}UvG97WwfhJp!Td`!0Z%xM`u9k~YxLR(kl*qscoP!bz z1cASCj;xVlx6WpiKgo z1DI`e!;sarmael*9O;gYs5s&DoI1@VmSd^!JpA61d+?K|AjC|mH@MK^_SOYzXkrKyCQI0*!rm?)+Y8JMNqp7#^V)qwjnbQI*@k_0Y2&j6QKh*jnVT2pzZrCls*8T!_ULxKTG?9G#w zITzT+v)hM7hJJn;>mTpO(FADI8`L=if0T9Z|25b4*b3zenuh>v2!#)^drS5PJwV#d#;A&Ibs2 znBH!O2Kvr@`nUZ6rw5+%;8eARXvzN)_&zLE=K%Tl{hAP35a)=eBSP&o+FED95r=_q zccfq!d>-(Dg8LD&zYEAnLDHx=0%$jTpdJT#=lQT?w8l?6{VSk;VnkTX2HiXyrRG7j z%6Ck6*4LTo1_fz+kcp27$G@Wa;56ZUYZgJT_x8ebaluRd_z;J~fzxPvj;>v*yDvAQ3O7PCJi*jr%?2HXpVM1dW$#PM|u8J_>Ddi0`xp=KZHhn zP!~Zh!Sr4z=?AcfcN=PqJEvS?7v;V9Mx*xO3lXNk3mpuG*=LPZ5x7cEd zox_jlG6p4Kf>K4&?vn6bl7?p(14S&2aH59rWl4U72BHU{$3Ch#X3{L4%$*H%L_LoY zI70os>0Nv>(NcRY_t&E~on^!Igzp3t%YUINNPy!9f3mlsR!<4{ zA~^7QFKW?vOh3OKM)t{AT4nouA+JA+7`)&sBT4~Q;D>%qY*QwZDMWC`$ z&%BAr6LwKg;>lMIj8iz7{-R$nOm}1H;-e>Z`XQW7y9_TAc}gP)R(*xu{|v_u;d|h(!5wS|}yi3}qLA-@$A^&s4 zJOfV8JgpxerpIxV#bKfS0E^){;C5D!`Zye+C6I?3>oVo2^6hljC-fPwF<0) z8&bLSeiWj=;Ftm&?am85oy5wa|@I1D4Vn3eUREpqGjKes; zk~(|GfYr1nnz9Uz{Q3cuBVN-8bWI9Xx*v=F3sE@-1Xm{A@xT>;-q$s;GILv^+6sWs zUSA8*LpVz2bdZK6O$EF};0%l-$07FiIAn%z8IXKIB9!gR0TOvbKe0MxC*gpfZArVp zY?8ngs3nGUILQUMiCS505Q}e(vas%Z0upYKyht>ds@R*FZ7~dkINvJELhwO999m18 zygR(uDW31cKI_c^Iu~q*=lvo2f}|E$@5gk}>F0pq4!lhbc`V|LN@LLthr+A<@++~| z5ewNc%d)*Wa3ApY{BhnXURum92qn$Dz`Ou$;2GRG9NLAGdgcXbQE(R&;Q!85G5oK* z@^LDjD_*{H)^UZ}#z71!E9)(;1EmIfLVIX$4L@MFYg! z4Gs+EgPN`e=wR?*kY*&!LcKmC#WQfA7;0k;%qPTEU4bHv#x}#eD(}m|P$B$SuL~XRwZ>0F>xI@v(v|Uf|O&rFv2x06rC%6n8`v?sJ`_h!Xj$Ue<9JsJ)H2h)rl1-XnPQC85W8rtF*8&n;&Yhm-S1OmMo?BDC@ALKSg8-m{mt za!zsPCFH?N;_2!EJRNY_Te_j+D-)ho{4s~CsL5giN1|tvR1>5)oyUhC;YmCT!rKJS zz*&3O`Ly^`9>aV8J1$!+U%aOu;C>xz>$^Jr1P)i(#UF>@G3-bD~V<$%?Gn#0#~5xb~n`UQbBHl7HMU{xiJC_44WJ< zL6bZzPvd+(EY^IWAN0o*&mW?96;F(`u;M8rkNy9tc>Z^;zpr@WdHoT^bDzA?|CQo- zP>L5;Jh42jc$x_HA5=VVNr6A2c>XTbzpr@O2~C{h=`WyGJlh2MV~XdP(ElgJb4sWR zE1pAi35utzzzK@ywvS!5I4|W>{Qy_-EdNBO6BN&8fwkfp z@lQ>t6i=-u5sf(+I_8YvO7Tn#EC87PnI=|>XD-Hz0w60MA^J0&PHGdP4aw)=L)s#6 z2F+2?`^N>rQK-I=ta$#V`DaEIPZdG_M743oV$ydZIvlzjqRUvX!y)>w|% zSmE!3K{=QOQ8GW*{NT4LiqQzW`>tCY##TadBKW#%XCO@ku_;gsSotr*?L3$QPrzYiIO`U! zE8eL@vt-OHKm+=8Am_V(mC&4k!N9I2*R1r|k#j%SVUA@Rz zlaOa2Zz8r*;P51Tv{8y=(jM%%#nHn(Am2X(j?h(nJP~siL5d@y69>dxMCdp+dkD;D z9OLNXv#^X{{WNvo51yQ6`c0vPsvvmxE1iCV=D?c)TW1)opEm`rPwR0w9NgK>HDQ3~ zT&;p_amH#eJ4pS415wfMNVd{NM}rpub`((QqS5vYSjh<>8kW&QGk%D2L-`>Zn>-t8 z;~{}FXuN+ey4y=}NLznzAfE^lp*>h*gMV6(>NGU@a55cEJ_TmR*ZLVsx{fJ*vGUkZ zz?yU|$el5U7-}a(ER7_Vzu%P-I5j<(k2h>42=c-TdL6v9+G=|7KG{az3pm4&ZqV|C(+L;Jm#*%z7P zr!D^7ewvFjQfPV7a-1p~YL^V9{!21lNY28${_*1fxg=I1e{p`{2Osj{aSJd(3SGb} zY!>k<&^*<^F9@RadN-@Pg>M4EpXTl#y)4;i(drX_FJ#4jqoh*U$AC#_4lDO<&H*eU zI6XLGA8P(87Kv%DZ@G^q`*RWd9~>E^d2rgo=*2>J%g~Szjpn8DU1&=<&hQU%jWLYp zg=P27!f;O^hVA)d8{4ok7vka9nCtt2g_@3U&jil~Q8F6>d@cf%rjFRjL<5}Re1tUS zr{jEcd^pLiU69VAyFl4u$#r9BV~Ea$&V|rq)}YCJEyeK_HTGV3dq)wt+1lwEbHCf0 zBeXw@(#_^$S@L*;NPAxNz}YPM4z@ky_$K>kb!Z0!93`cc<<}a=nYfzw3_ik2Bdoa= zyj<8_@(b1+5xOGO@tXGpd-tJv`|}97D6|1=mkA-h8kMdNM#JisfW_bloCCE|46Zf) zBjYt_-aM8YpP=Uu4{C{nsMY>y94|cHQ9nLb`Gr2Jc`uolObim(#=}QcQCkdx*i$A{ zQO&!-+6!-{(<>n_s(Cx$SHzjKQlvQT<%8M><9H#Qlr3-u&Vd~ZqNu|6#zk$D?|@b9!F5kN?wVEm5$-Ut$2Ko$G;jX zrfMA0+dm4({enag!*Ct?^({fF)1>6zlIgeP>tME9U?pAWl>X2;l{@Mu)TFGWY={y= zT>TnLyZZHEDS=J<2t&ck2%_}sA%BMe&0w`NBeaZ96PlJxi|{(MMn!Ko7i!Fr_!ApF zLnF`><6#%c5yDh#n&!ayo`MjyH8~icm)H+_uX+&{Iowa%*qWS=*eqI!L!jtVsC_bR zNq>S@tX zJ`bgpipBX^vLjJ*x<)7ca}YtlW@C#OR#>sPnuo)}DT{YmP4+JI!otBS)MDRyA0nZ) z`RTjhcR}Txq6@(RNz@@UIz$sWHu0cR{C|{dj3GO^G_PKWA`ym%3o*<_hlO}h|5@HP za4oXZpT%)17ubOA73znY`HQ?(X}tJw4!Hf+p)0J9r}%#KA#fTeWnKxkOrowy*p#uI z!?~`8u7+r1@@BN$=cPCdCLAnact40DZ~Nkp%r(SzxVS?-e9Lzdj&vf_}YE zexn5a`nbSazvjY@cJ-Z_MBmXEtGU0TAC>Q^aizLWz~76t9s!kNbw9eC079EB5F&hy zB(yk0JyK>s6?l4Sh8eU45iuC!1i@i)2+qTvtvJNp7u`q@HHlur7Qp1>CCRiznE^Er z%;HLKQ^uV*Q@%ZhW)9iwjg6@Y>6C1x4EU=dblhr(VdVqK!G1Aw8rDxH3!=WSJj-4g zokY*_;e-N%A=Y2@pjzQACvlqW9iG^dfo@y>}2GdK2(JcSiH> zuE1ZM=lA?$KXT^Gd+W~Jx%VyS4ZudVxw}oP2H)WEL6{P>kR$#tEBfi;w1}yGj8e;B4;XOXx`liiym@!*S7j2@d zQ<<*G(%ezBDEVy!!o6pjXS}%p;8k_z9@(W!^Bt zxbDJ0HhN>8(9$#Q5x6y-N-EfeexnRQdQ2pliwcd)XK3jqF@kxDAZau(tH|2rg4mh+ zu#Ct&sf1DT8r#oCL6ncWm-&)hzsl@k7ky}VnL`#fzcR*~`yHWo1UE1wsS&AIKHe2X z61g|k*AqKt(znseTvTKr4mj%2kzORUb#V>jb*RGh1o!!!CYa*}(rxarHhvF~xo5^z z3q_kN#~2MYVN&{&T%#Tel7@|1qI#>_RLsX}%3P2}GU>*kGK07fu6gW+>soiFG)b-e zV3?KbL!=;oV0`%)Zyu*;`kSqJOg;Y1B(9~^2@4m}0*;6JSaJo{`{f>h9?1-$FMm^87)f5VTQfy3|79sKUkc}}S z^km4!EV-wLY-I4*Rj`TwVojrJu*HCzw=yO519rKoxx z{_l{D{}ow}kPR1XglsGkLAQ_%50D;FmI+3ujgXDW;|=5|LN->2fDy9sB(hCpJVG}9 zA+7z_AshXqs2;L0TCUwfHatM?ig$~U5wa0G(HLFB>W~c=qQ8HxYyJIeE+veRjn0BR zHDu!ta@z>m$P>f}*~k*)zX;iQqR>-AHaw*~LpCa<+5h*D4fncy{$t37l`04Q9rfZ) zp!7e6Y*bEl$v+XY;eJyO+4#d`L!3JUZhZeG*KQ#j9w2wPr6Od6Z0r%l2-&bsaaAlK z8y+C{MlD6i2-)}zbuRjF^^lGCW*XPpuD$tN)a}h?$r*xcU#GDlbNJNmbOYI@oH%%CIbog2-pN`gAcPeE=1RexUO}L$aN{<;K*07g#R3);&yoX zw^$UsKNuUs3T)^X&hYD^@JZpA8a|(m)fYi}A;wb`GB+5P!fxm&#bOx|}G<*mY4js)BZz?q=SK^Pr8UTFcC3pdM}WyK0xnGIzsQv15?v5j%mDr)-Y z*YPuoGf~YE|0AjkC)kDH3&CuzjC1{kbks}-MtXuwAhQWoW^;|1(mmwAmTPT7G@q+s z%6l+JiD4=b@PZVlW{_l#UVaa&5ppO{udBbqR>ak(%i}!b`bk^h4)bv{ zO6j{uM=RQra;$^-ZHEc6sv)X1N=w=IiML@$A z*hi43+XDCE3_~20;pJg~^5`5b@=w?T6_XQ#;}y-qSdpsMm}u;y2eb{e>t40SJk6ob=xe;|T3_S;DkaF6q6H%53Zkv?TC&L8(EXv3RakS5Eeb4AJ*x_2f0hNaWCf=`Q^uB{eTA@^ z=>-_M!UR+O7^}@p7L2`I7QC9;>fn>Xs0ytLMTvE?6~n`d*#BpxI9-lN{^sS^r5Yg- z!Ukj7bZ?_iM3&5&H9Ru3Rd|;2AU+?MWx<`$o}BmJO93-FfAiBG8B^&p!f&uha}|D> zT#Fta8Hbg6>~iQsKA1g3(1OsgYP;Yt0i($i#~0arK#-5A@S!7wW*3~PLLSbmy~sWl z`?}TdvLCL}=1xV3$UDi_xLRp~Xcs(4FI+~X?FGZ34sjK(6e&BUmYa0tTA4=r?7BxS ziVA2@RDLwFt~Tb;soMo}l!DhBATaGKrv60Y1c_ll#7Gk!Fu;*fIRZOqxF;|6ZBq}z z$JZLw>Z|a%^~QA<>iftyon=<5@J)eR=E3l zr5m7eR1l`@;G%P1uKf`5DymHCCuz9VsO~L%@&#Fnv+qSH1?OwupuTXFAQqLGDJOiCVjvOF zj-rHFWbAq5hIC69M8vk;Xs3PJwXv+u+B)c4cUE1TsGFUR3l00Qz#=Ko8Ruzn z^D?g#q&-dq-zM^l9mX(YaWyTUddIH>q4!?OG%3h3@F2Md8w}cQ zfZ79aE4drN1_Ejiz=_0bd@4LZJ^&x?F-pFRH3_>DFt}E6EgVlOPDXL^qGa?=%}b@v zpGbLOPtt=VcZ9TK3Df!e4-*+?+DgE|gmX1P&fWqyAxkn!Qf9NGCk3PtJo*X~;8^z> zy-LO1lx+5(sUX@2$EVIA_>O?u2vL$V*S5F_n7<` z^iLg~iW#-n@~voCZgi*?U1dsX({XNgVw)mCdzdsh*;7ElOf=;7L(dOh5{%1^9A-Fh zhjpa+exvR#BRu=naX9xQXFHAV?~5qx1Q5{Ywz7;G^h1?A9a!9XJ$vogd*lf@r_b zBQ6lQ5Pd%yi(`(kK;9vvC2nj}6+8Upkn76T;UQnJ>vA&_y&OaN61osw6X?3uHGx6$ z+wrg%QN{88j~h~|@Ug zM<~+To&kjcSkE|d>{v;1irNy|3;oqnHVG+l)Y1^)g6!D2S%KH4QJx>HM5p`FpSs(S>{A>%9$>O2lf ztyVnya`kS<1(Gsci|h3gF@~$DEYgpHACcE1WIBJ>n)gTqea4uiM$E;dtdlN8-z>PU z_07U$DPhMxdKS}v>a0-*Qw(SUB`!p-!*#9K@jEF&mIQ`Z@%(nds3Q>1y^ZxDJK5d- z0%}kCg^+s$=Lo31TzX!250GQwpNEOFlpfogetR@8SY$oOEkxJ|8^+oe*{C7C9*%AiJ=yD@TdS+W>bkO+ zQO4$8p=Vti14sr?5I9Qpj4rwlf*!MHipge?mAjcNTMnOsp)#TbjP+wG$b)20qf75R zCa?{`Dyf+vK-)+eX|H^8nUyrS~8%b2k3T6r;0(gG1S(E?_!N-MNrd_ zsVra2$Rc30=2Jj#`OC%_KBkX6Pgr^C+`fRsIAn0@?vGP}j30OyL_#A)Z%J=?k#{nM z?M839oy}D)#5d@rPYMO}4^#WoUy2krXWna=LelRF{ZRrd_|mxUQA6fEgJ$=@(}e#Z zMM$BnA~0CF{wK8w1E4Pu&JmdAfA3Kwjxe7loOIO~pSHBz z(85^$B%r=*xvuqPt3>X1#v5OvLOG!I4VtHP5CelTjvjOL9uS$j^b;A#<>R3sHst$` z;}TnN!)Tl=_EgX9lj|-hq60no50r=NX@Ogl#zYZM$KNpu`XSt*Yy)#bm-AbnCAc=4 z($F0Q#|fw{lv~Y5Sc3=1&c)m{YHW|ow!Cnx3oqwW@`=C>>M}NRT;IAOgM!Br>Fb76 z1XZ!JIf7^l<;n2rJc8Tj@O6o~Z#0v_Ex=-b#XajY*TrP581NAxyF+}xY$0?j%oIVc9ce}WB>oF`dw95*Lv25vrks- zS?iU6>j8Rij|QG(zm-x-8(?-=&oCCh$i;KMjFMb{ey14V6WB*-5lMG8Q#r^@u}-mK zrFFLzy~FauFx9q{Dq4H7qR8b)Mn;V0NLEN44s7;2=;!6PryAiy@9iU&g_I`THj6A3 z8?%_HiWCQ>RGs)u^1~v(N);NxkCqmNUm9|pu@JW0aP+ko@CP{~MY(wX6H`^_^dzOu zc;GwKkDWhEPOG3|KDQS|P+L5Qs$J(aGG=30&^9uX*&f-@&EAhS`aUooV{P$NX$iSs z6fj!zqUYNq$nO|1L=X3oI)}r4U!3r*WJI{~>YKpOZBhmv59S7?ifiL{Qpky|D$Z$} zN^jlOpNTw1T4q{shK5XT{zXdBHC2{_gwgQbYImoZVOls!iQWpud(-`+b*0x0|L28!b zFVo!DZ~5kuD8oPBAEQ*FVa=m;SP&H-w}WzNAr8J7jGO8tHp9Ay`&zpV=<_#gn^Yj(Xucw&) zO52+575GIA=L$rR!car7J{^1q@Z<7VK^&w~yT{5NSPdC|toTjJvl-WcX!-_OkdN|r zJ|dvDIFAgT%9YA1+>q2Zgah~`tpT#+w<6S@wzQEnsD;nqa<)`p2Xz1Woo>hm%{qHd z5T->5oX!26#cs6N7;QRWacGW}_Wxd-q{(tex7RL|>l8k|%YD!_U^thxLjrRxiNp=_ zEi=0M4pBMB75(N>xy@iAm7&2rJi=&E8~C+|N8E3m60ix@1?*+LE=2!Mxvur^l*wUK zswU@H!%(y(^~3L|E+ot7fwK)--70l3Mn!;>&|$RcRNINMyx zydenCup?hyG6H7#75I@FnV+At!rC=%l%XGLNj$>aaa`dwAK*Ge73B9E#) zYt@!St+yI?kQM+?q>@XGW{fUNF5?d|S4NqDTRz=M8S6XR7grTq)e8TuWE&*)3rd2g zlgT%1YZ!(^j)=r8HHiLE138FgQk?IrPZgbJc2y&!jfyoMDm~WdxX6;dYXEr<8I!36 z&}V^sbfm4!QZrfU&j9*9;lsj_9XWuXwKGzRyV`${R)=8$cNNJ|AH^+o%BOhb`2yRk>0u`dQtdf2kjeq> zR0Xc~oasyD0Id?y#$4zd%kN^0>nB)v5cR9>-%CWZ> zsFw}%ZF8xacigCj?8M6r-EZoNcU;1xuB4OnNZ%V4{^BDeu{4G@lRj}v<1jaIb0U@| zol3&E)ZMjFnl_>iw$!;@2iNNkPshsi-RT&RIU|#PQ$6R zygKNm%y<*)udC1VT$<5uZ&;qgkhnE8nN_-j9Z{T6M$1%{RN53d(f6XUC+2YssuJ>R zp(#0H&%qMrT0nL zvT&RZ?`ubieQgvfqO0Q2H-1?>cE_(xKt;l|BpgoOl){PFn~KM&4{Bp<+Qu{-P8*(q zg&DUwFiWb@x)%;}AB=Oc6->YrdyAH)=5mkzRki_YyDmsFn!JE1{)XDu?&oI@ok#V2#BP{={l&^~% zwf4`AIvj=JapU=mxbFGzUQcyz0gKqujVhR*wVz`GEj7skJ&WhsQ7I$W`h&JjuE#R2 zIbtHeTL%PUN8iBP@8QEw=nR!%)U6lHk!yP4b9R=oaJ2f{CwDId#jSM?!JgniYoKVY|bSZ_8Ku2`VYd!pp*OIs8^QPDWgdKvhH@7gEPn z2ktw@L}FuPStQCMZ$x5d)XXTHimr^tpx8mNI1+m#7R%$8(+nKHhjC}|=i+fa{tk29 zJgp0^*8h)2jz!{_YDsJ4r)%}$sF;24WW<>Wy`x$mk42u0WLH+R1I_Ch^T<@;YOh-m zu#peG3s%S|BEv;64YL>lhlL>vLvS$kTqven7g{-8cdRH4+YrX@=S)7&_6j?;I<|8C zitH7MHBoESdr}dNg)z%wFf49V9CpT)^V#{XzR`hH43C(~AAF41pW8kcqHl;? z*ZPL&h?HQyA)Y75RVv6QR5Wa`U`)_T(#eON4#RBwZ0hXn>-hjUGmW-Mq+}Tugy~_^ zxlGrDnLktnwaw|_z#JY0JV3Vj3lVZ4It~2;i%IzxIF+iWz?Ix?y5Cm!_zjc-cA5*% z5_ztH(IEy)YH3;C7o;V2`RyUIp^El9MlCmU@5sFdc(w($2OeV;J`Ig3!f-=#cuEn3 z89TFWb8NU4KFyBpb~V{!vP;t6FYzhE99=j^BmS>T{4|228a?6|1;3BS?GsK$#*P3G0~ zGZ1PTo;U6#alIosPH#Vwbd)j^H2E@B9!-}3C_w+>QjPW8r~#yXSjp`Jd4MJcFg@LD zrk*7A5Vxz+DAT`q(-~^Et}k60h^xw+nrGQ-!7*kiU?lAeMjyPOlEAvIy%E9*eqZkE z^OcGf<}!7fs)2LH@&s~_9J~rl6?&ACHDT(>MKDSyJKV?!Qg>K!AYK4As+RnoZ=?5+ zEVI@B4_-FJX5!<2x@+NZ+zvDzcLCC+3K@#!#(Dd&XTh4A-@^i?v=d zB=kI*wK{lSPnYXJG&7Ea4+YdtMdKJJ;AO7$vQbid<0fh83p_y1{ZJ8VkFlYvL($Ee z&*R%6fvKMf?9Siwnj50OCVm}_`t6t;xR@_ah9C{mq809iuC`(|O>BHf0&Vpv;eg_#nM4HLiWQRaW#k7ggfjK`JZm$$wdegC;tyJ~f> za8@{GdDQAzVU0te#vQ8>PHYU`LURW*eerRWu_fRlmHa#ej_{?uk0cuF{SW%1Ka*W> z=SLc!Ikwd{?2XzRg}YIAqj1`JmR>yPq&VHP6f3CT!)k;FqBo3(&xYj2blmD>T)QGC zsJ+{$Sk#Klv#Jk)lT^Z@9`-@}im@#|uu{rBeBz!vi<*82j21!d5UBa=-jqXNmOa;w zWl?3Uv6%?EM@|SRkrRScM@~%lUhYkM1tY>W7Pax151w6?(#P9>oj=d5{W+bZrBL-D zP-9Wk4uL}yyYWNYLmrpLij?~yaJX*?-(%Ok>OgIlJ z2=agsg7o&dMTQ0H+ut#8Z5i4@s}H?$1=QAGWmc~Na{ZkuLi#5BmRzS`F3<7YO1*2; ztwkst(}D(G7toG@)SQwa#|^n;e!y?pKtbBmV7J3c$Cf_)vC0K@U^O#cGgp!uGRi!S zi1&L&n-0xki4He{Fh7m;ffbLeL%F$`EwDE5Vb+;k+;0h(g8Z;CYCHJ8QJ*F@Npo*) zB_QXAj+h?ToSMJLeQg1n$?azikk|d)ge;v%-!Uf?S9$DUsEgdO zIo$Xni-Z|(s7$LR-XxKxD(I9-H2grht4&pTiF9VJXp!dI+=)aChrG!j&HTQ@$rVlZ zYDEUzOk_0Dm^qpTx|4v>C?-!lzd3^Z1~bV`fIIYAr{e^(v9DA$_EInABN|HS;4Gp} zOjcy}7fctJfYW;mStxvm@$D=Y0e<%Um|?|BV)qD@C{F8`<3g; zKJu%Rgn+>W<%%==Y`_h&dj@U|#4b&3{U6Hww78ebz;%`!RCJ(`cFA%^U7%un?5QT9 zLeXfJt8_OPaTQpn;%<)m-}J{a#c^~}<>H#C9FNuqt`B5n1`{a_v<&2P=BhA~nGKBE zw34nuN}h(?kBu<{U;Y`Z{nq>OE47)6iK`MX%us9_cT7FWp{9DHbz~lQW!3FXlS-_3 z=`GKqYfN{TlEZJiA5*BX=XwWgNr7nm@-zAf@tK|J!_f7a{0B=_5}q-BWBgF86v5pC z82vXuDX|L!3j=X6@FGX7k(|`1rc|oYYLIf=tx9{qFMq|R=JJgT{jD+dw;7@EfXZ41 zbdgn7;EwdMQ;FmPe{Tp#G+ zT@$?vRU>0)aq-JhpA+dontpGr_dah-R4%iM90P^EGkr1BZ=oL@D9^L8B#~zxCWat; z59Mm)%~%J|JLGB8@2JmiYbisrBzkl3m>~#108S*dPzDnJ^QRZ`o+01Q|fQ4kM)`B zGqJYGt|t5`rQ+Yyj=7E<3){pEgC)!8@7ov{IG-I0TTIw4aAWid?8gQ9WkH9rDtPeR1*FAsZ-XV5uigYXz6P)XuC{{rwTa$ODAiKfD2I$*tL^GzT7AdN|oQrtU z7%ENu9>Xk4Ehy5M4kifvHhPji}+?ZMzrC>WLh!bUj+f*)(tAW@Pc9H{g z-6M^tes3p7w@NyZfEmuEPV7wCnTp-@@6^ZqMn@ZAcjMhW)@&9jx_H&UQlB(CB*Ibu zQ!JqCg0JwwX(Pxl=>Kz+$g6@pgC@_?p-ky1{wW|$#gTOBeH4Ul!6h~C_!@V*@y>B+ zz7CG3-d3-fAo>yCb))87f1I=*V0rt1cfqfgL#Qcauxz zVL<{A%A=I)8VKbV#r!`;Ma;?*b%_$8f;g+U=XOCz14Um2D#!$B#;n8)(w|kkw6>Rd zg21G#&@z!PaYJrX8A9!hAT2RH`BpOKGsp`0byn4(X-DqSNWoDi{>A8=gU03Ud?vaG z(u_$!vqNwy;s($A;{|TdA?II>Hpw$? z>B+B1M?o^MG2(6n9;ftW=l&&dGu(8PMB+@!^%RnT2ux=QksHwDVtL;vG(%XC{CZBjxia<8JLzaI|FAkZfD?jMpivcsyDSB z7Svl>5A*9Ut&i39H`Mp+M2+@qH2wcitKe7{hH;qF)iB4aVcv9bgj{VV)}E?HQ<6^2 zsZ5m@_J&*x!I98gp*$q6lKUDx_sm?QU@7A15GONM(?7E=|zE`!%o{_E{-ll@7g~^f@j=N<=C@M5C)TS(RN*% z5kP%k>u-(5Bk_GM$KPH68~&C};MW2~pv^D5%pb@#lc;qjWw2aFpw&w}&B`@HerN+I z`p#%U@1yHlpT0kQZ`@D9ApfyUEau2|U~A&7MB35iUH}#+t|F2v2;)bceK{)=1!;z5 z%9J#^))da_S%Deh`Uc8kFU2A|Zg3pd#65^Zu6jL=CU)c2!zHN4@II1)&2cHVD%L!? zr_sUYSV!uAZohvp5Z!3{qFgil##zE|+}DC|JLjB3B*zUI<(y1pmLSd0D|&G>$`bZ- zXZTQHO~sPy970(SkZVu0Jh#lq8`Yf>?FC_KuBdZdu!{s?5Q#d4YN6+cRq}!pig0_h zeKg|`B926$Z_L0Ltc_h8i(YZP;;=1lTO1C?AEX`di8@qqci4x#dJNt&SN>>BiT*3Q zuJvEp+S_&CI{+bMoJ>LO259&kTD3t(hPnh> z<6K3jJyfYv$1xUye@L&nOC8IPsf-TC{4P?*t%5={=bUnt>7!gxg>F-EM!Qt7-C1>b zyrEbyZUlDY=jx8M@)Ei+F$FFJAD};m3-;1rx*zm+btm-K7!@>%8wC%L%T0;9&XpvOWDkcC?08x61*?U?s; z9|!IMQmB6)L#PD~gw3_#MC_ed%x)~>hKbqJ`q>{jFgf8$B32}AOTziI8Fer;{YoSBXj0w`E1$j60>fHvYl%B8H$R6X z&sDumo^q)qh5VvpxSW5PXSAGx?Jw?o5hq?etyXD)_4sLS8D8A*6r3NOUk`QFFu*aA zACbO-7{<&s;ajPet%=i^89L0ZaMVbS`z1m2!rU*`gjjBgNcrMmcy}Vvqg*wejJp_z zn{jvebiFRHF_4SVH~E>UiE|)5M3g=`wWij>{923nUX$6KCI5dOh_&c%@){=uQ@HE{IY19J5Y7iL>xT5lx}%{sg|8hXpYT zj|!Z?qgPFwh3)blrQkZP`N*LoGGm1WHflJ|W%Eg#HRMll^*uju423ob0{8|fzSClV zmC>^%&NJd85lz8x#?oMF&O*h8AzXI86~vgoGT*&C zS=Gcje=|gsTVlm!J(8Zk^e`6Ks9~$`N!CykXAPgvbTyyH=21vWH!t%TfsFy2U=aM1 zI0tY*M45Tiua_TlM=HgA$Sk8`qlT-#_t=M;IBO^tQI$eaY3R!ZF$$NOH?#SgI17i( zHrgShY0wZp038G|3J>$)`~3vY!q=(DHQt?G=D}98gRLc8>Us&{Uh9DM1mzk(r-%ASy^WULc*t#%uw~e=9 zog+`VpI?r|SjF=(IDSSvuEh6D;8A995^g2+NyhoqtlH>NdroaE;z^%t)iR@@Cddlk z7>)sswTzFA*&KuE39EVDh!X)GW_TU7!6=YIkM1RWhJPaxzrY>;wMuEZOJyE8Lf3v; zqtG*^Zw&X`J9%7M#=5%6J-x24$~^1xxMp1$rN;f{ zSRFo?0cxsW6QZ|sbJAAsu`W)d#jRidO=?{8S$|=bQCAX%GY2`ws37-~zK>OgmNN{5 zin`BtpmfN$Eo=B4_+H?SxWEK0V3`|J2l!fcNrzX;EP?xK&VuT#Gn6+e{`h}sX8ieFm0xQMFdDD z^Dq3U^ho}@-3rm%Xh-r3$PFF9pQeM{(iT#k7WH!hH9g4HfXCdSc!2z6u8NS82}2d@ zXV@O28Cp$)5yAK1eSsR{Vc>YaKQ2VqR=BRIt>6alJ1Jo&r9&^4=p)FN%zs2X{Cwr> zdB)N`2;IY$hhbmL!5GYsT@;HIv3q0DpJZuR*?w(%Onh_7o7^u;aem?BG2F7)f}t7- z#Z&H3ODE!VE7AgSPr4yzwak0gy~aSPHq<~~WT)uwEOb)qwlbPa{;(J<fGVPnbfBe6)hU}!QJsc#Lbop6yWrLvci+JEU)=fymjAN!mrpiG<*9VRjt7=L zTsB@kV2mpsiA`v@$xFqh+E>z0*kn@^Y^ zEhaLlAhxC+OQmC;!2YoO4ntJX;L_BsymLnGG{bYxBR9AY7pj=cMlIa3Q|TJCD+qfP zchb$29xRh2w@DHjR2D>mZS47H(jmH9TIN}Bl}0D*Ppe47fJOz4aI8~Brcot72m*stmMB{eYmvoq$+Uo+^kof`)h*HeSWtR-9nqNi^GaO-_Vwl`-+i$}} zMYK|7ud<`ud4RqI(Ho+%y4mVxnE!m)^LYIHh?O0kr|o4_ZX<6#=yYKcL?Z zx-sJz{Q~5UBKNv$;WDhw`mUaaVUlAO1JG40z=FsPk;twyt`62V-QN^v+h1vq#~u2< z>@M$Rh;n4vb$Te#4Ncj58G1D08scPHWf~4;9Ic0*&n10UQ_r}y%-8)?{5?|402e)iV0xZ9yS2kR+yJDyVIN@{yO9+9L5FAPbT znSeRmg<*J$Q7v(!&BV6IZ?~9lo4eFhLy8%2?;HL7mKLk7-0STZL>uc;EoJou0kyHt z(4tEd9vEe{vEKB%s|YS8QAJr>?tt07uF>yOvxT_&5QfRIvuTM-n3I5g3Fi}#)1agQ zN?I;r1Y7%q?Q!_!3mmme-pdf>$Z{I=RH74Gau;*V=m9_79ca++TMq>-wzR-_E__to z$Zh_*oT+m83BE|_-{KP&hM?=+J; zq%2m6LMI1LCj5~!?t?lla655m65T3#*TeEQ>)If{Z4uu)51BfYxtB9c)BA^2sqV{lSIYAIwm)^v#y2tBcX#JA zo8Z~_8|>~MPaEU>3i;79qLCN3iRh!)jwChZPamIVTm(=GM_)vf0R z$;A1%TkMbv(WljQtxv1>d82VVjq`_C!XZd2y!bAvVrjM?to(lN*Xo%_qu|hVOi5py z&am<&8Q74qJp(5*PiNv{=DkchKT2T-#wJWmz@Azs_*1#VI`WYShGCv&0~>t7=!rIU zqob!#dsQkR)fS;kxFnh{8e)7#-@_ChaTwlQ5l`OfX|=GlL3smGGl&dR2w9i&i1&9l zWS+H*NFPD88C|V?omUA++FolF#cl}F5V?*aJaxDbFD?Aib?psbzNx{Nj1KZKi+Dh# zcCsMvGNH_RD<(wjkKkGApac8k_s8?kk$4=BzZ{P#iPQN+z9RDE3yhc(LB*wtpL2(G zSQ5894rk&Y#$$Bq zA}$Z+t439J9A^Fv`a%oh;K}(Ukp_Zj6j%e}#_$39KtK|tS+`MafFPMDu#e|%)rIJj z=(^S?af+0%<574YmRKRkyLwWA5%ikH-0+Lx7#Fc5g56&dhvjiw*n!g`N=Ll#h2eN; zAIzV@9o7+(?5!Nw7j}i(ncsUe3{`s)Mu7FgW|@s_)0Srq`I1KuogKCZ?H|{8Nl9`Y+{bVk;rkL zcH(Btz*y{z9TShW4R<%hl17^vaho9}6|-Lnxsmt}|0Q>QB|~)S)K9nm2V^ZniK6_Q zt#}_7`qBM-iwZ7Oq1s$;q>fBFwVmOk)6B={56H=v4=k~d<&1d3e3;C?G`j?oKfsvK zG5q;Fz+@WC-GoA4GA;io-!S4^%ST`Ed=u?^n|E>5Rv`fDDY*-Re^1!4Mp~o zb}VufMB;8_ZZyV6pNYnt*!`I}m$|JWjx?OugwX}QM(u+b8*Sf8$451QZX@giQ-=`t%L1#Cf7w?`hs*+rVp=&vGp$2$Ibfvxnk{;no{v7rWaoqvY1x) zoG(Wz4r(iFnx6sEuU~a)4p%1+kei(;BE+Px$)%jCErRGOLl(088#QI(XmoF?`(22x z0&-pJDxgd$VdrVAl6ABdEvF!MwED)&oDyi%LT!*en-6nK zLA14KXTni#NB$@vsq6TdkOohXMp)`N!k5E^=+p1I)~ElFlyIQXv5F-~;9EV`Zq&5f zr`U1R-ZcVK9Tyy!6HOiFs+dhNI3IsLo`$ex3FuR+uoily^rurm$_)M-Nfx8LrjeWL zSmZ$0=zbh{jXO^PdA4~$it}(5ek7c8Du@=CFi@i(@c{XT=8KTMdKIRoxOyCBm^p>p zuXV2~N}%_~**>k>uzKvu7nepmg_ zH*jbmhN}Ea1tA3?SQWA=1Z5%nLU1_bN(glo3q!G7kp$dPNsLZeFLEuVn^pCcr(!U@ zrs#gf9M0PnYg8|CzhkHGAz!jtU-QKP23V43aIS^N+A4M0RgU4V;$WfOs!(6We$7Gy zEQ9%MJTZ*pDjCgGMWwHWnN>2C7*8wRLU2X(akc7Rl}d8eHEd8A25A%=bs~*ETG8PP z3|1c+Mg5LZ>X(Gjeyt|Y? zTbibF8DvpOSUbiT@SC{jGnh`{8r)dm4w#@(e*Q%ee||@^K)*_PWx{a4blAj{)uTX% zPI7sz@!jN$BIUA~9h4h{@mkytsn@H2|2Wj5hVDC?aox{{X$8kIR*(loC<1Qehmb_E zn_>YP6TT@N*X<9ueq~F6cKG;X5}XZVFP;rIYWaeUha33&v=W3Xz6}wL`I)ZZ5A?p^ z{A6kb|9=+5iN!&uDf5jWOh*uOj0ib|t9#A37)?t40}OlpNii!TAOl)NpV^Ea<$bGfsCt%RgVA{Th{j zx&9X_`lKSwaJbgzFzxjrN@eksJ0#8$adL>#Oi#<48=|wwJru-2CG1qreRwTn#O<*) z^KvHg8jRry?Hz$>VKik?@M}Tr*lapzq8Ef4GQqTf$d*K-G6$VPjwj-9{fheTFx8#p zgkwm(2wHep7{Q`mNk&mGh9lGG`UVZ-*kL|y#(;LS+R>L+1T1{DANgPvb^=}77Poc3 z$H;S^D~t_on?v|*DPqT_&=aAUTW?K0ci4xp3fj2rCODgkZO|uUWQIFTUn}Q4?s7g) zHhRf4!-{@>X8KC%Ph2qLCvA7Bgg)UW_|TU=ay{z~tLqNaEa02Pvp`;oQ6tR)&tcpP zlV}DQBp}TK%{V!!hL9auDqDd{gTOxw(C^KE_-_F)ulBs!IG$0Nfmy8V`ymE=G~grt8TJwKKF#|S zS3bM)8Mb}C?enL$uQkn9T@6-O&U&kB8}^ZVNp3K_v-up^Wh^n6=Y7~43w##%;I_|g z8ntQ{)yBCt=h|RE+W~D+*tW1Ob}92?=}57dW(P^>d9Hha(v3tR4NiR&L{eS+*y`g}r4T9F~SYTcu(e7PVDVywH5 z$ZkQj=7uyMOUv$K0qy9WK8(#hQ`hJ~Lkv%!;DPANo=ZYs_PR(3QkK;1%@V&6hw_EN}!+4UFH$C-xL8+yVz zGQmx-xArRiGu`O39ph8xbJspi5N)t~8l2!lwqHQ9*`?g2SX_otP@CIR&)j?lW1B5* zhQse&e~<67+@{M!$}Sf8UqKvLky1t^Ul6UOQJVdGrGR8=OPNKnYl1YyS_&XT& zPT@O@+Lb~MEU_eOg@-`m}D95`0y(go-Bwc^~shdx*nH{gN@K_Da%} zX0FM^n#}E)nALnPNGaq|tbfHyG4z;sMW=abO4_He%C?y!z9xT*Rr=hrjt zAyr-v1mRQV+{;f%y@rO2HrPR_h1BW2BOqhDoVh%3juu3l)-`E+(lCi19pt<*f?c{G zx7F!SIiWrjgxX8z86x4&c(gRR&Vo7&9~6+B2F~Ra`->nAal@I#wq1xmt*&c*TJxj? zk9|CPa*rv<`%sZ?R9Q2g>rAcdweYxZw{&z%ADE63zAjks+Tz!+?6sAz(NA9rQEeG_ zFb*qgZJ|!u9oCVvZi4%wPE+lEsgW@>8t?7vxcz>=u?rbwFC_98L1J`Pkn)fNAt;KP z9))fVx;MbCCVQKpu-RBf;yv5VNs{0o$#-r%zJ?R8oqi1$UaNQw-Cxgr9phi0^t$IH zsi|S;fJ_^=icyn@EEFUjNlh`K>Aa?x`0ViJ=*|rq7Qb}zB}{#74u8;{BFN_?27Q~3 z;79Ju*Nq?M_t>cp%y%4*sH*v=z;9!frNV-9jw^(71ZHHXrIZJWC4$gb%hJPw-WvP9 z3x)x!qsd;kE=1PFkUIQYW;f~61VdG?bDEE6jzaY-4t}ke9rlopq;vtJtC|i~g1OD< zrq;yhx;F6MO$(YLx5fPyn9y!#JM?*Z-piQQWo{QbtBRmD@X98SnlMS}8%F8hlZSyx zzJ_VqpS1$Njjl>X(Njy=vQ^+_sM1{fe12h+C(Tp9dgX$BIe^aW0`vT?!-_KEdABa8 zfoD$6#OlVINkY+ty*|_8K?@oS7q`az&Z|4ukmkTM3oEntb>g1nDYZS&iq zsNM8-=>5{LmvFlM>Gn9+{&sr|er5D4^hXg<2hOxTLw3WqJz0Z0tRvgq1oeJxc-H9q zSGW|{BOdGO_2MUOkHD?5sNM-4Nme&E1hq-r(&zw94RI~pz&FvS(eOsdZ8D$Jo$fp=*nq#7kmrUQ&>m93yEtv;0HL?xtZ+wy+_?3uiI@US$ z7S=;a=IqQT?mPwL3;s_jP9BK5Te#QFXlwN51+1vOiXZ0v9So#C4mr>B`*c+hADA6j z>)crrq+THQWmmC{+PAu~AX>56&J`@?0kYU9B4o7oogi+ld4Mc7TZHPPG-@l?*^Po| z#U^Xa*&ZN^wd`ngk|}kxY;Z%|kOKOU(sUw-_QUUUoaV~v^NOqB=%6XojC2%)uiab7 zk1Vb>)GUixOTzTzLEMIp5*Y_Bh2G_vd5#VJuPmeYc01HWbO zMqRzNvrBA4&>qh7-`tQPT1vWJZpd{lj=E3~Z3!%jn9i!U2*`ZxRAlp5-NmT95ovuE zQG@3~^d-=BtuKMGQi4HQnijc{An!8_gvsGIS?^iVLs=9m!tRmo**VIILgx(ri0_Cf z7YkbFv7RL8p0JL5=O(yHGcCuwZS>S1AuMzC9nb47?|NSU`#sO=FWxt<{SXj=$Yj*} z0$-nGOn&gAF!Zzapt8%pf-JI8BgppWd=!nLu~%a;G;VGj^3%qqVRl9--5~0fbCumM zb=AV8paEeh3M&XlWjL+A`y;1CVQJKWXiSRf8jDG>>tZopDOA>^?@GskjPqPsy?$$S z1$g5v{QB4U^?Nw45?I_&=__wg-wZ8selVz_9!&Ev?ZcBmp5jI7Pbsj2+-uaEEBZBy zR8}9OwGh(wf{=H)9bKzV@zL@CX$~CXCS++&`^Z%4kUT&>vj^OSX#XuF6Iuxy=MM}aF%o-1JTHq#uHrQxX2Ii7rhUB{v4Q)>$SIM`cs(o{mC+0u zm=`lRl^GCteqB{}V>I zVxIpIH8UR?kQexm+4>u|Yj)jLq$9&q`lw?2S?q)~XT^8_(8E*uNmVy}X{_uX!Dxr$ z@wgiQARb*4`Xw;h;c5~dCFPM~E{(p4bLvz)!&#S7so0rtmPQW9eGLL>-soC)0(n*4kRQlzJl-HyB4qql<{rLQxx!;f}+XGK-ZyTjCoMrE_< zAHOh0#)u!XPm`C%4Oy$D6ud8p_K8_&Tg$It?Jr#g%Y#nw6Z0=YGLaQJmal;e(H{}l zwf=|PF=N@T5V9H#wPJYK@Gy*2X?n-mCfKkb zyfhr!G*kCpDXx8QPX=EN##k-c;#2PM=;bcXwd2|4n27mL#wa!0`5w!OnqV+r z7ZKv?5{tQt!hfL8Kp(6(A2eg8|0dc411|;Axb-*?y)6AKm~5F$zw3~#Ay^u^G!)&f zxmFCa4&x8~w7Oi?xN7*RA{I73*PAV?aEL8m8NK&Hmo6k(C8Oy~pK>3JSG=Re3{htm zx4wSpukyuh_CM~AGyZ4%(JN@0BK*7)ggZfb!Q?gD9gHI(M?!FpNyU*DIyjWRKjT96 zyd>qy_}-5x8hCF0v(a2UzWR>Lw}Tj3>9fZN`+P3=;Gp6|T@tX8!MjW=hMAUC3#ObZ!#5Y#^yi-XI8QO1F~3-BE=Wh(*2lJ~T^yy`O^y4kt9 z(P`CStVQi&FIRT7{RQ1jAT`@w;crT zK(p6)3g!sn&xt+958Rn=jG}e%#Wy^!$+Zn{e(2@*N%aSi9<%Z(B)`ALC)@LTqbxHx zb7cLuC>!sJ06`Vi?R2winM9PL1o7B^&bhkZn*2$F%F9UpbX zu^%daVD-jO5N(Qvy;brS732bPaqM`wBmJiYsf(gcWt~toz%+e;iOG57 z2Azps8PB;p>xK+|wfI$LWBSq6>JX|L`9%@LjId{Mpi7U}aD0&I@*vjeagWbXzQ{7^ zRp*M%d~F5MCiK)-m0wZWA)o_Wx*X`j@CrfdV*4-e{}PXfnfey6g_M80`jhkeKt4Jj z3F5%PH_lPv{f!{nyd3+s;#)8CBmwQ%|I1syTO(lZ}Iym|K!FeIGk-d#^tLb+jO1(>6&Be zm19D2j*0(bTCQoPV%>XQYTy?-5`EwA`#xrWvW*tL8h4%o`qES=#p&1g);>NZ(B(GtKk7!Nk|s zOk)%lEy85CFqd;ZP7uVw>Q!?4rh>#^sg}T}r63M0Ft4Y~8-h47%Unw2Z9%x%GcP6b zxghb3t6WIrZ-Ou*t9d$+o`Nud+&r1cKtb%xAYDjgydd%DV;)IlrXb8*Y#vBtjUe&N z?3G7kt046AK{k;Sg7650$NchK62wm0@>@h63lfhLxJD!(+n8S3g0$~doFL4C$1JjR z#}$PB73t+{czhk&VFJqKWW?C+ylfgPc>{x0VN#uYa zPHy*{mC>dLqfOXbV!BbnVA6@Eib?#>LeuO; zB#c;Mn!1GP?M|Ccoi<_8S=0Qp9C7EVMtj+GOKf%f1w8&>+=tll(J7LIf12|<9Q~r| z3uJwL>uY5Fxa3C+%QDT&GU3=1Q^gb}S(s*8G0mfvC3MaAtmVI~;0hCWwi+YdIQsGb z*#mB6rWpfp;Ml*a{>2w#lYs;vmPgK0a&5j8o#E&HITo?NSuC?>l*cUh@bMx)7-`>d0mcIBVo!%xQk@np>2@R!*Ae}RF=dd51~zGKX$F?ccEBO~nJjoAn?$0JAC zS58|q&AxHkEg0Qg;9)sF`JnDIj1<;;aD=_A^m6P!JnoS)`<*er9Bbd(8GE!7QU742 zE+@RVQvN8`fNDJ=M+6F=&E9)?w}V`RigY;IQ8-Keo z_9oh!$8U{ohBsWgA$HjYd*q6BMcrf;l2V?d%n__D=#q2LO#r}iKyN|`TVP1CA zGqGEqfuY~`GJ$V#Ilvxyoc(b8;kf--^K~u79-4fh2vl-7cF-=@b{}ppJ7vu&sKo(t z@hMk>w0dNO{cPdG(xK=U~SzK<@o{?9rb? z_pvwtE#uqE00rur(u@!=C@EE@3_AvXRRk5p9nHcL5 zE3Vd2EU}-vJhl@J`FU5wR-hr@a7CA#aj8p8_R>$7J$OH2>gZ$ki7@r+!-#zbP6AnkP+jKHU+9Qv#S4{lnL<1tW?Cn|z z>#H>vVAg$afP681IVQy01LTU+x-elo<@bK5O)`zE1LW4`dzx{&J3w~17lZ73rw%p9 z9)WGUE4_Po*)dNagQm?R$`;Rg_h`z0hTl-ZqQpHl_G2~A*VuP=Z0xZA*zs(Ky{qH5 zOYq+DU0S;;my^AFe0hUBFa7LxEm2~Zd1M3#j(TWa+WL6pVHdvq|Y{~m6amEq)^hp-_r!af}R!R7!OFxbYq zo*!I_pF*B_36>g8y;o~E*xugnlYaKUru}Ss7%OsyCx{*4Y3D)aZjTJNFPwNKyx@@g zv@)DJJ^53V`n&*HcJk#QX^-q-5BjG4Wz7l`V)%HQCxj!tHGjo2&P5Mu)vAsT`-8s6 zglX71Y+M}e5oP3B?;dsZ#RK0y(BAUH-=AbZbkb8N*&o*R*4bawt*E!}t^W|ihf6(K zRmhKd_xLt6c`|E&SNTxL7~A|iAhB`8<2Ye3Xp>Hnia+VyV;VZ_7f9iX0Qq?67wDCK z^p1judyGhd922M1?!FWn>8Q9;vJq6Ws}>y zdmLOHv;)!J`i_nkHZdBccRXpV&kTA3(w}=o*{AMd9U5=-$&(bh0NIA0vcRbxk4XF6 zKllj~!aiSa(Teu7_rniBk4IVjS);w}p@-T>9*H@(hxW4%9dA#pwr9XEHcWeHn*G?c zPccm18W8xU_qPOLtyqrxveR9p=5-s_qiY9Cr^Uo+v32?jhA??L}v z3*CpG(u=(wvzLv#bDaIvxSt|C)oE*cm~0idtx}dJnn^YSgiNRf%d_8C-nH+ zj<@>n^x$y&<>TK4xzFm)e&^dZP8;2btpo#NGPmG;orrs2j~ISPaedkAW%jM*yT;&) zcpgWMxy6$hjx&iXL7w-BjDJ_zF0^06KG2HLs^BFdRP27C_^*-+CLxIUf93_#MtEY> zKS$XQ9lq*F&X*qaB(QQ_zI+T;WIZC|zvA#K&{%%!LqGm&N39zL`+lj3%)g311QGxB zA8VlvSa=X$F12ki-W>nc&?|@GyDA<)F}>hPphgUR0u|lzIu05Co%j+d>_K=CyBLRv z-Qx>)YSoB;vi)Aa<$D-V*#8qPG|C<|7C(&n@;(McPM-3F@P#M)zPvAfJ?SeQtirwq zU#=V^YVPGrsJYk4UWh~N&OI(c2%pFW<024Ad3_IEh~Ko2irZ(sh1qYvSNFnCR$;Gc z?SA6>4yV{!OJw5uh(I%c9^H^B>N_Ls`SSm zvF*_<_)(TuupJ$O=%b$v2o0WP|8>vnF>DV(6yLFX`UxE}&;BFUBn^n%{4yXkd>Rao z??VeiG;0re=CJfP6@(GKxAiZwVp_J<&)y4>@BMLdxdEoYbIQ;zi%pkf& zqwl_`gQ2;K;|-$VJ=FGk_k-=>I8CwSWi5}@jx8~FD)Dt<-KKZ?VR{z)=It;P{3(R^`-`~Hd{nVb%q3AaJ zU89S!(=C3h@PR!Z*~@-=pTF;e??HPUmFk*pT4Dgk(e?-ozm9m{M|%yi55Pcb(FYpc z(9d4m?;@o5m5(&SPc7ciPk8px+cm-@5+3l7cVB9cMay_Vum4>9_HF1Mwd-{6`7w5B zIhsK49@DTA;~tfy;uBxrfW6T`2JVG?=zbq-K*d)|{_-_L1`MPxd|EfaTB7jg*nrLa zbM}Bkexl&r{ReDas{U*kP`>w?&TyZGln`wcj{Q_(N`4On}g`t$sL18zEB{rOmI zz*!flKerAW@cm2FpKC9Q4LI{T^>=!}7XI~zeu@^&zez z{S7h2bvpOLt>B#oKZ?AId^q(~k$00HMt&xFFZqvfFFuRNYxhv#JcX^x$a~0ts2*E4 zl9%*XpqBD@rxiIGX*Im9+OqrhRu7(~e3tU_DE}$tyS6KNU0w&F^hJKRQeKpY_?$pq zwx^2sWQDCc^3~**k~a)cdR`~Ljl5!@;yOKB$ZN^3p*()gNv5-x{7`bd zq%HXnQE>QZKRI9z#mmUClp;UnOJ{p@@~q{C4ZB=WRQyY=j7rW;Y4|@CvPDihB1QRC4-gxY2;(cI}Lsc zc@Oz$*in4iz=dD+e60KgxAG$vjs@=`uOJue10vobLsh)&hAeEMN#0AoobqDiB;-4X zDftw+7_0h+H?(1*Q|f`VPAtXjzZp4}7$rZ-tzlUUr~Lh^{Yl$!p0QsV76;O}>^K`{vR<*^x?57XBwbza~GrQ{Gx< zGrxZ%w~kcc1@+i^m%Q@`#TSwvJV5EU3|>R7JGXw+-$veZumW4C=OXZ!HOT5NQFhkt zIevmhrhok*;q*K}zVcATFQ%UD8ijm|^qlhp#Zj#CQ%2r(yyAn&r;vA2&k^KV@^g*!EFoWM=(&u% zf_lbN&;8^U`BCI=lXrhtrRPNQebG;f^!JWY{2S!oChw%Yu6MJ^YYjUmG^ZZj@BEB> z>-Uv@Btw3#BCnwS!^ykJ7aR6`ntZAe?;GSJzo+!?Lp?jlmrqb!jL*cUKLkX6drB3b zuCP@~Uh*Bq)8wa-4>a_r$cHe$|3~>t$-Ah36#0GR4dkWdI3X+3Qzja4e9$t=4}MHr z^2J8_han>({p$@ok0swqeh~H4kuNp;>J0J{rbqk9GV+1rReA5T)N%G!urC+xLACnKH{{0y59{5A%*N`7g-avjBVq3_gzhbCx5blb@5xv-A^P-{+HWGxD{R{B$ELzb9?68G=zQJE4pJVX1$dd;Dh`hz%pOc?LuFK0tLoMuIVx<2N@@bUU z?fhu+J=k99{%AaT&S=M~$;*uLnxi@WZ5ZvAC4b2%m-ET@WO}rpTuMI0$k(;xn+-j; zk#94~v77uQgX2rLrG2Ul{eL4r$>1N7k2doA1^H$}{~$Pwu>U-AGz;=Giu^t!{l}57 zH`A0?Msw;JNjtZYuQd9R3(0?M`130AnBj-N zChs!JWu@1vii zyOEzwDT#shWtrG z{x$N^OsCG*Hu47g)mWC}{#f7=cK)&9KZlU_vYkgWED1$#XUOj`{NWAqmsl>^Z~sYtoRQ9cBa|H;GweB- z{5OXF|0CaKly52dAx1jCPrls9*DUhI22YS@jr!6~zLn*IW=ei8A#bG~3`^wa*W~Ni zUg`E{1Nmb5p&p++LEgZ4b-VErc`eHw?j%2-ke9KaJ%oHXCV;}PRx@6mo}6i|k$j|K&za=4#yF&fe6vyROUYY}dUq*#gHeBP*7^pc^Tu?e)}%@O2(`G@GJ6BM!xpN#8B9|%^F@Cs?yo>#dUKe_Te37B&Me?jsuRqb;kdI+uP}psP;pZdB zTPd&m-y_LK8};#ct;ewER4s4t)5(X>Zn~dsC3lQ;E+QXk)ZgV=zmfi5X?cU+N&Zu# z93LVdXz1TcKF>(c-^lki(*F^-Sck9urdm;%$c2^t(4h$4Ric2d@5hpNlVchsKU2wj z48Dlm+b5^|FUa+-`H778407u*1+@Mf$V&{qk-UQZQ|f<7^HECAAE^H$@*eJ|?4bM* zZ0Lym_8g@Imr;HUd3Lk{Rg|Ah-fi#{`H*9jd_CotX+7jWA;+(@$as6n@nVtuJVD;| zZ3Ql&{5JBk?y^=u_Csa0SQ^YyWouUGtR@)3tIUvm}TVyVv<^3GEgU!g8m75R|U6nK){CGR<1 z0i0ozpP!L;#ua~n@m@z>!2&sv@ov!amrIx7LVv7kQ__4?L3gzftLVh58+E zp=YWg|5M8M&_Pu0EGtXiYw+vHty`4-6z%^wdG-#)&yZHNtbdSiCI21y@S{{ZJMUET z4)a?|-gCd=Yx}DJXOOS#R{S7!v92Xw|F8lSx9%eECZEE1w~!BcM9Gh*ecmLmeN^!; zDgTw`k175wb+JYq&GbL6z<$(IO1_ege+?5fhrH}*C4UO_q_zAr3jCV<7vvSsDsUzz z0JnjQacK|FOZ_UiOc${Bz_bpN8fCP2NL(|3DRS89F}M&wi!kKcwBxBwuMO1An@gl0O$*_;c3q z=ha$%kdnWL1G{G_zu1ufi1PY~r{352_P11eYD<)!Wh~z&@}5x&OyI=+3i6Ut#fR;s z()l2H1s&~5+W7;mhg_Vu5TE_Nt>P`KRC<1}r{YI~i~O!+KSHxvKP2xYx0Sec2KhWA zza7+{ouc$tQ2r{)FE{kxL;3ZTzny;dEP2B$rALo*@YAER9EY5u_-Cp(t%JTpUaxp5 z^EH9I;xxriAU}n?(@~smXLW#!b6F)km!;FcLh_MT1=FwjDy=83^bDY#AEKVF9_47Q zw8J};UwM|2e~*S9e5{JM>u+KCap1ylJM&6joP!ac(+NNBQ@){F~wQ3@=sbS%0~be~9TB4=(K1^+s6Up?r3Yl7EX1bPjpL4T@|3 zzn#2yt>W7M-y$#jz2fcrseBFmF5@-QIR;$VZT*8vejMfJQoh7U=ed;c{gaaa%^phs zO;R4?EBg6pg{{Y_r|U_T-xBh_QBT)XN>3c~Qt|0m#&o_Kw$Gv9BAr9tSMuAL&Ppx+ zdRTrw<*m<@yfaAYzl8E7hWtI0Z|KhqQU5EN4^@1@5T$32a;EdOaJghcxwcpP=;I$ohCGd3K`W%UQ2qCATIizEnkP{foSlyo2&5 zj#25fCWqzg$veqU*9nH?>SZJ8A!YRnY=fl_={|>J|^FqQoI85Tk#oz zjS^YDcuhfkN{^Kn>jd(OdlkQ)_MAoD^Niwy)x}DY_dcgU3VtR&tH>Mrsfu+j{p}vD z=TLG^Bwp3>KT`Z4%701Txlr**mni+;K2D{7E8hV+pY2sW`Ov>8Ip-L4Z37qfY+(D@ z#d5h&@{!hh!%y&C6ObQiwHki%JMtlh{1)pF!Sb@B(?K!LK84F!;md6$XEYyu{!mCNMp0|66IFqsXl%!uCIjyn?)z z^7F{M$Uj%jy0t*^kyaPWMcd(At%v1^W?X(&k(baP8p!V^Z+J$fN5}gY@-p&~l>dj; zL(Xo&+W&hj_h*$JR9gA@7I`=2SCUteTlDiz>YuCiyckZ;0`f9)ot~eQmyql9+^9M0 zoz{OJdAFhe&*T*^t9W~uo*j~7zVmIxPar?&`y#)CtS<5j@+$J~!<2l6<>iuB9HDrH zZuiJLk5qgU`FbsXwBnOgvunKoUhKW99&pi*bpD44;pHvz^#=cxyw~9SAcLa4EumjA zIo5%a54B#pTct#CqzAJ+7|AXTCj{+YWjF5kikC3m5;Aceeg%SLx;3Y-k?TV1U zD}r}N@TVg9>k<6J2>$N~zCXr6#mcKBf|r92h5s*LJ=&LfuZ)mCHG(%q@HBX_ay&Oe z{)z~GV}zdjBjlfm;BQ3m?GZfo!{YWlID(Ik;3q}!=@EQh1fL(lmqhT3BKS2C{H_T8 zPy~NAg1;NV{{ddiAND+{xSbD;;NOklQzQ6~B6u=_FN@%}z)y;$zXtQXV)brSgr1ut z_{Io+<6*`1KNlhYHh8ggeik7=q@uX~k_cWF!B33f(<1np5qx0;zbJxV170k@w?)YR zF@irE!M8>5oe_Mm%HsAsD1w(q@ahQO62S`*{QL;MDuRpsx?=vkE<*l3@M8Ag5+VOu z1aFV1N1sN>?>Vt}I)_H^BP00O2tF}_&xzoT5j+Q8V)gx;7a@O11ivYQ-y6ZVMDSO@ ziv{HF?+rnA^$}L z-+NMVdma(NZ`z}{{0}1Jr$z8o1iv7HUlzgFM(|DG`(s{K!TE^Is_IX9OQm zUEB`ejNoG;_|ynKJAyYv@LUAHID+38!8b(kha>pb2>x0G-x0z86Tyd0E^g<;Blr&^ zcszpVBl!6d{E7&^t6%YSu8WZ07{Q;4;BQ9oXCva>86n?)O7V0Ki{M8@@bU;gF@n#E z;E4#Hjo_UTd`$$u4ZK)C_(X*K>k<6p2tHtHaeI!4;73RBiU@v61W!cpB@z7R5qxz7 zzZHB`-{FJxXoUQ85&Z8F{F4aYuO`Bt5xg{lPmbVLB3_8sx$#74ljS(sj>S$qmy35e zj+1iJjziYwwqPaS-aC3ZA$U22we4(4m zyUqli0;j&CZDM<~NK8?|>U4Wsk??-n@URvcfR4#+1!t0*Z^|Vb-Ps*kx2iQRq83l9 zIwrTLn+nNH+7Ss{&>l~v<85y7r!A>WV?32F{;(;P$+zbsLN;X*MV{zPL!mHrV>0hH z6=1W3>tq_w!rvk)@uYx6C)3Rtr>QNgQPxSr{sAkr!?IJ;wGsJ5e62*yS44Y zLcB3s$VCekF;_gD&WLz2=?J4Fl1&Agt1gc0&2-(wj7-j*8&9>n`RZIQqYHw?B&Dhs zXOVd~!H|J6nhT!EHN{gYXBG{C0+*gBiZ7jZ+LP%*`SFg9wYFoHw4_soFx2O- zY3z$5YFTZEGjCFLRbBOD1Q909yM^|wlXDa8Xeg6;N0hsEsNge-qcG>9il%gVi>B4d zqoO#4jMJ7$w96;LT-grXI!&-;!L{1rumS3Xo6F{0{O=?arDaTXvGy}yY;8G_SX7mX z?a5RjnV#u4kAlvSF;9^#W8hJ3hpHgXOm`785b!WjR}&f0Itksi9h1;Z2xY=s`$`Kh zt;~liTtF8hC~ZOmRLJHsS(!DVGawLXGiJ`JteaBbH->=7H)IW( zwyJnjtDC42MvkYwCV?%sP%1jq*_p}|nzlAKT_{cFb8)XIWRpH8?Xpo9^0MI%OF7kx zo7}AEO6oBZ2tTWmuBqZk_;>ldn-huGU7Cs^ErnJe$J0(Go$6q(p_kc7tneH1w|z6XV5gr zCRGNNZJ8;knh9r7E-4!qR(~Yf6ilWQ?qX+Avd}7rBj#ganVp1e{*dZK5}6lWx00w%rIOivAam7i*#a89);KykG@dEfLGe0G9q5YFqWShh zPEN&Je4EtN&zdk{-1oevxOW6_MBP$RshS!ty_$4WrY(!%4H{hsH2}R*dt2TqTkI@$ z7UJp${x5>gn1Cp(XhtIpn`uX{)$BB)`%2`U_+oSjz7yA^m1VRS3fB~+oNv#H21a*p z^HJ*;##70J=nq`sXmS|kG&!)6tO$X0C_!aQbP*y(@97NLNr#iE*jzE_M>=y3+)h}+ z2;)CjU9k6957*{9vqCvV!O@fBO-&e*IB`D+W(3Wt%%X5QYLiX#Q>q2=B$G7CBka}aI!oMK#x!q{nFay|rXQH*u%A}G=0_J6Lbt63;ky%SPGT;V zDXv0P*5Xg{t~d=6js7v-@!p^DM!$cM<5e-EQvT`7r2Qg_XR~hbR!o+C!F+IpI3I0t zN4hB~te-<|Po`bJ!o?THlPM1FRH7Q=dB0jWCVlHPVyYnrxn4YiWSX1dd?ADm#*OPC z-h8wyfxp|EebM%2CzyxEj)FVO&;}$H0D>Ko5DU)X5dlbkQCv?@=cCy{o70AN0x4;4 zDyYe^%3YJu7x10~$dHU+zM&{c&0Z!nPOHIbNP+Z6G1~T}Q|KPUcVhN0YD0jcfW-U( z9b1#z7;o}xUsEQPLc=Ns2)?+_oS+k-rWKMc?U{BoZ0UsA!5L4{#fCe;a5;;*<3*^K zN%{cc)FJ3JiV2ljezGE}^6{nRq}RVylXqoIF_RC}szfp$a@Rxw!#Y2txD%ba(XhCp z|MsL@*&YRM#gsd6>sK=uYdvmGOlNeRb-8q)5-0Ec!e~zVL5e)|BAk&V3^{t`svOXU4FCIFSaebWek&nK7oM%4gQ6<8uLt_n12^W6^LeyL=k z;7vQ{qnl0oy+d1kvG6%Behdr6IM}}r7Pc>zo+z3T2U%)KdkX;b9gGqL_d=&R&JU1a z)feqRz*|wT{F;rGFkeju3lnmo!|&o9C($l@$#f==EWcTUFJgi<3oDaiq7g`dns|x9 zQQs%tGAOdr-iDdGC?VHr!>lZ+mROt71GowF#(v@gg6(KWTQOIpj3Ye65Hy?@RnHSJ zdIxn2BZs=HaBH3ows=`N=JM2KGjc&8aPM0IQvg|17;E_s>A_$}0|?&@*jUu%Vxv33 z_3+z|6EG)dwILL)ks@TMVG^J{t+EqbJDo3w0^XD0*e|4BERqHs9&?@+zxsp*Z}0&x zr1A%4mQaP`1Eb_f1MPuFU(V{l3Aeo`_ckOJn z&bujpq@zdYzTSx8x||gGQc)w(+S6u<9OsK>5ryxdSbY{l#&Bu07n+^G zXhGcux*3ATfEpPBe(T2rGQqpUBpmx7{;lcx3yXP=*eFB0i4qMA1VVl5!W61Tu=8Ei z8k!V~NibqnOUU#VOati={^FZxX3%eQ!CviP$bGWF?8JZWn2*HjGzKSaa;pR#tWbxE zn@FlyewSTtHYc|gYw-vRz-ootPk_KP++2&R9tcYb6jO7a-o~{)=X!_3+N&9rCBs3-ok6ZN$uq+3Zl_3QIC7s!KJ}*{o;iJoGmT%Qa72n~&=XC@Kshg#Q0LyFRqn!^v}kmy(}^mvWXLF0X->)%&>^TTlOmA>OeZ~u zVFQ@EXnh}GG9u<%-qM23X&ig%v*faRJjKm}Vrdt3&vT|CDXZg0qPGp-!A<`)+e2yRnj z0ay;NlsUrbV2qWC#B5`!LhfWYiOn0xWKk2c!7~8mV}iq6XI!AehBt}bG&b3Og_8@0 zfniUiTwuZ#DO0=;fjCcyh}n0bMl%b+#N?f3c)VC(Df+M}{BTC7=MfWU??6j9jcUX} zr}-L|D|gTp2ebu}=+8BGXZr7j7AbZoIX*Dd-JRUnz$iGJxj^E+RzU`*-O-xb8#$+> zxuPZIXhV;98r7Dv(`S`8I=tBX>08>64=vOLa_NX+jVS4MY(B~Tq-MPYrK30YnKU-n z(nCsRb;59P++5MJB(U5wLk^VWZFyNhwtS4(J>WP;1k?Jx30|>rQb2(bJn&?<>-fH$ z8n}H;VbMyWS!xp#26wTy1mkNH{fs^uz(%F-&<=GXv}58`HC4IT97Wl0oRXR#N0f0K z(diQ$1s>uU9S~u6C$Oxc6!meBtk@vM_F1Di6qd!27sb)&eY^S!e zrmo&8FYBvK7o>_-?FftQc}k-FP{rU!pd`nl%7kaep7|rgM3#4v5YGP=f%D&WtD^Zj zYL(>fG)5L?d1NTxfL`SZ+T1_wWfUjeQfURc2xg&r5Mbl^eXc1I-&C27l?1@@9ictechTz8)V&-V+5>p`lkl`vIrGH zgmf_TqHC3Fbm8iUmIb|dpcXPkVkuCZm-Hj#1Ef!#1<7MyO)M8Cf{P@&C@Qs7uz(p? zK&Q-v5o5$-KOv4VOE6^Mk!(Vg#iUrMDThNAANS2h5^CXr6V+kb+FVBL)r$_Ys zCpmm7=RNi4=;fNE2quQic!=E)oZUfZpA>5?MaIN!$#i=@qc%oGIIdI3v1^~AYQouo zc(H-ANLGzFEvwwB0P{l-gTXeO7}5JEebps0?I^4wsp_LoN&Yv5#U?tQDx6f+sT-#@ z1jNDB3G&>kS=FUusyJB;yHO+adi-(Gilo5T)H8NWv>wg_1GBi@q$-p*uhCMAKw?%F zY^=Nvb0 z=$nnR=xw5AwaS>;sBv>>-Z5s3Z0oVPBu1P}ni*N-)Bh=^G7(ep7)bm094pAzH#-VD zVD&!w&B zy4@RPY!PuCuRN2E`DByava5q8KJiyKWfN9FJ7(2(REi0iQ(0R>DP4WA)FRJDcr%i~ zVH|Pr2JbxZ0ALH>c;KdnrMI|Px5SYg>QvArR3$@Uv8KQfDOS%7k*_la zlW%$;nJjd_;==L7P(;_K&;xN+rpN;{gJO+A`%fr54lm>7wKri62}$k(83bM`l6zd^{HS@ zIqc(O_K9~|@hT~grZ|N*Y|nD8naJqZCKGtQ5XU&$7h7t&i0wMLpISr$i+ky$S~$tcWQq?77IlkXL4QTjB2NP<|NUT2~`M^$Y&g!j7^C10+UXg zSvjMo3UtcMIZpLd2ADdj4rum_Djjsn^jQ-tr#rJIPp+???aZ#6IK3JQ#fAjBQN3v? zcBUrF!?=LlKC0*YR<#||aac#bs8!p6O+cJ{$FY+(HALm?g0h^{H|JcpV#@TIiB-;+ z(lMpupi|C4>cwF~sYAWVBVIuC_oS5anVAAM%Tlgbh;$P=k{N0)Gh1~2PR;BYIF+Xh z3RxA!g!g`6mD-LeHPh?G$`)R9#D+W0NY{2umeYF~7B4}{*Ft#1oO(G&bO@J68H;c- z+m(440=E>d68re4y7BpSZgU=3zBugEQFrUt1 zZKcp$Jg5r8%uMm#a21O&P=!O3m2zlB3yJbp`gKvL^OwS5RB2lq*I>b@$4qNOeGCS$j;2b8ki9A7V5mmItx|MlJdlHpj-@*z0GPo zs1ci}GqH(^ziGc2;#_4mCDc+)U9zdQO1#b^i+&1}@&q%+hZtuYwp9DMV%du2EzTi$ zx)55p^?VRr!KyF;s>0d4INn=Ef2VxC4zHr(B`0lJPUdw@L+*QdhO&4(JmJzbnA=PHB3v93wm|%$4jcH5ITX;?ecviim>yh--$*A5bnJMvw01%KSoQP6(rlKtZ z&^A}EhEIo`@a^J(q$8!$7(%)K&N&XANQcdd8s%39N}x6L#buj-W=R~{l=V++&|(2j zw{TK}T%-i@q{JV>I{0b;!#Yx=GGFhhVWfeoAdWpjnR0UB?&56=0O5eLAryb(keXV+ zmGA!wUsElodiO=SI?k48k1*>F^6+oAoZDcj*$sQfrTS#_>BxQ-r2XcqH4m?PPo z#MY-*l5FMx%;phD7;9D&+I#GH;+AHYUYbuJJAs7SWkXfII_yo{^vI_%5%ngbk3goc^uXjv}Gq$(^p!mK7FN4yG%F#rQ0^4n#1<}&i zTbEvCUX~n_ zKy_8|EZ+5YWg`t8$U!yVv+;A~7DSS2WnB{9JK4qY!GNu0>!UVsf`LRw8<46I1D$k8 z7710a5$iX~PsRJfwVC`Zyt-VO!<#qCt(0eIcar8o4U_dW(4gvpnJ64l@so}11+U*x z^$@L_k<6NWeS2e*e8Ee_RgY8CBH^-MWBlxx{a#L6)Ucs)4gui?&|47WQ(Yf9D$+q! zw;&=A2GwJ2T^ewhTD~=b9Lhe^_dL<)YGY`1zFGYNnBPnblc|An#4tIiW>yYwu*XF^ zuPJ(2^z#7W;bvgeSp3t zoClJ3t)k&8O?0FYQe9C|A=)XlM5f>E5bj927jWR;Lhz3L|ZN#gUSch+u zCrwHdZex23!iyJWz}2lhxUL^HHs;)g`bi2eUFyGKCH<$s;ux2ApJ_^A&gv=5VedxX z7x_xA{|Oxo=>hnMuZ@$R3H(D}k093 z$g95K=Mb!Y@K49Tl7HyyVt%Qmh&P6RI=ueWfWC9^xxu& zuN|{?1=4@>DD_ldFA|aBqtmbB(bqY6_EjK!84c!LWoYpo{NeNyTM7Ijo@spz46m>2 z@jE=?qvJR8pT;v0exeY}bsm4eNQ57Oe`ff_U?Piq;-CCv!`B0Ot1lw1;3top zVE7V-*VnGSg3|tXx#{orJ;w;&-J#_5Rm*8DI{o^3p%LC%LP=ihE)S=;LM!4`{0vVp z{rdM1^wmhdv~^I$6%4P-&l=KSJ?6EcE+}nTCE;7^THK5Hb$I)pRL;OBoEyu! z70-g<*Ckc_`YL{ZAo$UC)9fz%AzVcJm;Sv8eKqCvy}mw#u!95P_3vBgtCoX^{OEgq z-2y7oujB9G?_KEY=SKc@IHk?9Ucw*3cXfFE`xN@xEtKP+73Fc>TK;`r4x-rUo5OUq3Ly>)+kb*U^VEATK51TdNoMLYL0J{@oG% zyBn*G_RkFeDZ+~Um*HRVqr-nQ2=O<~>0Q4Hu%PJC{GQz*IshLUx7L0DCKICL`Fl(! zH-u}TDf^9x@aI(tuY?}{-k!X{e`ffjBf{S|Lxqneyp~a_FvE{!c+-9x?@%34b+?XL zU3GYU{b5A-uNH{b+On?J1*?L4>DS?BGCUu9m#f-U_|vZn8$gHCfnWq;ZD)<5hvPCGg4*wO|1C<_$f68Td#wsz$M8x^-|`bbGgmD9 RuisJO`LoJ8xMx2N{yz>}6;S{H literal 1871888 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ⅅ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�=|&!rSDxf~r`pQz6Ah=+nM0uB&*fp+)NLF9 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≠6qq(V1f%yfeMy=q9E% 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

5O^51y5G~5m18!zF- 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


v!eq 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 A-~a#s diff --git a/dataRead.pyx b/dataRead.pyx index 4bb558c..ba2c2f9 100644 --- a/dataRead.pyx +++ b/dataRead.pyx @@ -9,6 +9,95 @@ from cpython.bytes cimport PyBytes_AsString from libc.string cimport memcpy cimport cython +# ────────────────────────────────────────────────────────────────────────────── +# SymBufReader — bidirectional-buffered file reader +# +# MDF4 metadata blocks are linked by absolute file pointers that often point +# *backward* in the file (blocks are written newest-first). Python's default +# BufferedReader fills its buffer forward, so every backward seek past the +# buffer start forces a new read syscall. This class mirrors the Rust mdfr +# SymBufReader: it keeps a fixed C-level buffer filled *centred* on the current +# position, so backward seeks within BUFSIZE/2 are served from cache. +# ────────────────────────────────────────────────────────────────────────────── + +DEF SYM_BUF_SIZE = 65536 # 64 KB — same default as Rust SymBufReader + +cdef class SymBufReader: + """Bidirectional-buffered wrapper around a Python file object. + + Drop-in replacement for any ``fid`` used in mdfreader metadata parsing: + supports ``seek(pos[, whence])``, ``read([n])``, ``tell()``, ``fileno()``. + """ + cdef object _fid # underlying Python file + cdef unsigned char _buf[SYM_BUF_SIZE] # C-level buffer (no GC pressure) + cdef Py_ssize_t _buf_start # file offset of _buf[0] + cdef Py_ssize_t _buf_len # valid bytes currently in _buf + cdef Py_ssize_t _pos # logical file position (cursor) + + def __init__(self, fid): + self._fid = fid + self._buf_start = 0 + self._buf_len = 0 + self._pos = 0 + + cdef int _fill(self, Py_ssize_t pos) except -1: + """Refill _buf centred on pos, reading from the underlying file.""" + cdef Py_ssize_t start = pos - (SYM_BUF_SIZE >> 1) + cdef bytes raw + cdef Py_ssize_t n + if start < 0: + start = 0 + self._fid.seek(start) + raw = self._fid.read(SYM_BUF_SIZE) + n = len(raw) + memcpy(self._buf, raw, n) + self._buf_start = start + self._buf_len = n + return 0 + + def seek(self, Py_ssize_t pos, int whence=0): + """Update logical cursor; does NOT touch the underlying file.""" + if whence == 0: + self._pos = pos + elif whence == 1: + self._pos += pos + else: # whence == 2 (from end) + self._fid.seek(0, 2) + self._pos = self._fid.tell() + pos + return self._pos + + def tell(self): + return self._pos + + def read(self, Py_ssize_t n=-1): + """Return up to n bytes from the current position (or all if n<0).""" + cdef Py_ssize_t pos = self._pos + cdef Py_ssize_t buf_end, offset, available, end + buf_end = self._buf_start + self._buf_len + # Fast path: serve directly from buffer + if self._buf_len > 0 and self._buf_start <= pos < buf_end: + offset = pos - self._buf_start + available = self._buf_len - offset + if n < 0 or available >= n: + end = offset + (n if n >= 0 else available) + data = bytes(self._buf[offset:end]) + self._pos += len(data) + return data + # Buffer miss: refill centred on pos, then serve + self._fill(pos) + offset = pos - self._buf_start + if offset >= self._buf_len: + return b'' + available = self._buf_len - offset + end = offset + (n if n >= 0 else available) + data = bytes(self._buf[offset:end]) + self._pos += len(data) + return data + + def fileno(self): + return self._fid.fileno() + + @cython.boundscheck(False) @cython.wraparound(False) def sorted_data_read(bytes tmp, unsigned short bit_count, diff --git a/mdfconverter/__init__.py b/mdfconverter/__init__.py index 96fbcbe..42ba582 100644 --- a/mdfconverter/__init__.py +++ b/mdfconverter/__init__.py @@ -12,4 +12,4 @@ # along with this program. If not, see http://www.gnu.org/licenses. # # ---------------------------------------------------------------------- -__version__ = "4.2" +__version__ = "4.3" diff --git a/mdfreader/__init__.py b/mdfreader/__init__.py index c57c65a..7fa607c 100644 --- a/mdfreader/__init__.py +++ b/mdfreader/__init__.py @@ -16,7 +16,7 @@ __author__ = 'Aymeric Rateau (aymeric.rateau@gmail.com)' __copyright__ = 'Copyright (c) 2017 Aymeric Rateau' __license__ = 'GPLV3' -__version__ = "4.2" +__version__ = "4.3" from .mdfreader import Mdf, MdfInfo diff --git a/mdfreader/mdf4reader.py b/mdfreader/mdf4reader.py index a8456e4..a61d0bc 100644 --- a/mdfreader/mdf4reader.py +++ b/mdfreader/mdf4reader.py @@ -33,7 +33,7 @@ else: from numpy.core.records import fromstring, fromarrays from numpy import array, recarray, asarray, empty, where, frombuffer, reshape -from numpy import arange, right_shift, bitwise_and, all, diff, interp, zeros, concatenate, maximum +from numpy import arange, right_shift, bitwise_and, bitwise_or, all, diff, interp, zeros, concatenate, maximum from numpy import issubdtype, number as numpy_number from numpy import max as npmax, min as npmin from numpy.lib.recfunctions import rename_fields @@ -181,11 +181,9 @@ def _apply_unsorted_bit_masking(buf, record, info): if sig_dt in (2, 3): # signed: sign-extend from bit_count-1 sign_bit_mask = 1 << (bit_count - 1) sign_extend = ((1 << (temp.itemsize * 8 - bit_count)) - 1) << bit_count - sign_bits = bitwise_and(temp, sign_bit_mask) temp_u = temp.view('u{}'.format(temp.itemsize)) - for idx, sign in enumerate(sign_bits): - if sign: - temp_u[idx] |= sign_extend + negative = bitwise_and(temp_u, sign_bit_mask).astype(bool) + temp_u = where(negative, bitwise_or(temp_u, sign_extend), temp_u) temp = temp_u.view(temp.dtype) buf[name] = temp @@ -1339,7 +1337,7 @@ def generate_chunks(self): return chunks def read_all_channels_sorted_record(self, fid): - """ reads all channels from file using numpy fromstring, chunk by chunk + """ reads all channels from file using a single numpy frombuffer call Parameters ------------ @@ -1351,19 +1349,14 @@ def read_all_channels_sorted_record(self, fid): rec : numpy recarray contains a matrix of raw data in a recarray (attributes corresponding to channel name) """ - chunks = self.generate_chunks() - previous_index = 0 - buf = recarray(self.numberOfRecords, dtype={'names': self.dataRecordName, - 'formats': self.numpyDataRecordFormat}) # initialise array + dtype = {'names': self.dataRecordName, 'formats': self.numpyDataRecordFormat} + total_size = self.CGrecordLength * self.numberOfRecords simplefilter('ignore', FutureWarning) - for n_record_chunk, chunk_size in chunks: - buf[previous_index: previous_index + n_record_chunk] = \ - frombuffer(fid.read(chunk_size), - dtype={'names': self.dataRecordName, - 'formats': self.numpyDataRecordFormat}, - count=n_record_chunk) - previous_index += n_record_chunk - return buf + # Read into a flat uint8 buffer, then reinterpret as the structured recarray. + # Single allocation, no copy, and the result is writeable for in-place conversions. + raw = empty(total_size, dtype='u1') + fid.readinto(raw) + return raw.view(dtype).view(recarray)[:self.numberOfRecords] def read_unique_channel(self, fid, info): """ reads all channels from file using numpy fromstring, chunk by chunk diff --git a/mdfreader/mdfinfo4.py b/mdfreader/mdfinfo4.py index f879146..787e5d0 100644 --- a/mdfreader/mdfinfo4.py +++ b/mdfreader/mdfinfo4.py @@ -33,6 +33,12 @@ from .mdf import _open_mdf, dataField, descriptionField, unitField, \ masterField, masterTypeField, idField, _convert_name +try: + from dataRead import SymBufReader as _SymBufReader + _SYMBUF_AVAILABLE = True +except ImportError: + _SYMBUF_AVAILABLE = False + # datatypes _LINK = ' Date: Wed, 8 Apr 2026 23:29:25 +0200 Subject: [PATCH 2/4] perf: Cython pread() CN/CC/SI/TX chain reader, 3x speedup on 36k-channel files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds read_cn_chain_fast() to dataRead.pyx: a Cython function that reads the entire MDF4 CN linked list using POSIX pread() (zero Python file-object dispatch), C packed structs + memcpy for zero-copy parsing, and a fast ... bytes scan replacing lxml.objectify for the common MD block pattern. Falls back to full Python CCBlock for complex cc_type 3/7-11. Benchmarks (3-run best): test.mf4 (36k channels): 0.90s → 0.61s (3.1x total from 1.9s baseline) T3 (480 channels): 0.40s → 0.33s (4.5x total from 1.5s baseline) mdfinfo4.py: import read_cn_chain_fast; modify read_cn_blocks() to use fast Cython path for files with fileno() (raw open() or SymBufReader), falling back to the Python path otherwise. Post-processing handles composition blocks (CA/CN/DS/CL/CV/CU), VLSD/VLSC detection, and CC completion. Co-Authored-By: Claude Sonnet 4.6 --- dataRead.c | 40834 +++++++++++++++++++++++----------------- dataRead.pyx | 428 +- mdfreader/mdfinfo4.py | 148 + 3 files changed, 24038 insertions(+), 17372 deletions(-) diff --git a/dataRead.c b/dataRead.c index 24b02a0..8f03eb5 100644 --- a/dataRead.c +++ b/dataRead.c @@ -1243,6 +1243,8 @@ static CYTHON_INLINE float __PYX_NAN() { #include "numpy/arrayscalars.h" #include "numpy/ufuncobject.h" #include +#include +#include #include "pythread.h" #include #ifdef _OPENMP @@ -1568,6 +1570,13 @@ typedef struct { char is_valid_array; } __Pyx_BufFmt_Context; +/* None.proto */ +#if defined(__GNUC__) +#define __Pyx_PACKED __attribute__((__packed__)) +#else +#define __Pyx_PACKED +#endif + /* Atomics.proto */ #include #ifndef CYTHON_ATOMICS @@ -1879,8 +1888,193 @@ typedef int (*__pyx_t_5numpy_NpyIter_IterNextFunc)(NpyIter *); * cdef extern from "numpy/arrayobject.h": */ typedef void (*__pyx_t_5numpy_NpyIter_GetMultiIndexFunc)(NpyIter *, npy_intp *); +struct __pyx_t_8dataRead__CNFixedHdr; +struct __pyx_t_8dataRead__CNData; +struct __pyx_t_8dataRead__CCFixedHdr; +struct __pyx_t_8dataRead__CCData; +struct __pyx_t_8dataRead__SIBlock; +struct __pyx_t_8dataRead__TXHdr; + +/* "dataRead.pyx":115 + * # All structs are packed (no padding) to match the binary layout. + * + * cdef packed struct _CNFixedHdr: # 88 bytes: 24-byte header + 8 standard links # <<<<<<<<<<<<<< + * char id[4] + * uint32_t reserved + */ +#if defined(__SUNPRO_C) + #pragma pack(1) +#elif !defined(__GNUC__) + #pragma pack(push, 1) +#endif +struct __Pyx_PACKED __pyx_t_8dataRead__CNFixedHdr { + char id[4]; + uint32_t reserved; + uint64_t length; + uint64_t link_count; + uint64_t cn_cn_next; + uint64_t cn_composition; + uint64_t cn_tx_name; + uint64_t cn_si_source; + uint64_t cn_cc_conversion; + uint64_t cn_data; + uint64_t cn_md_unit; + uint64_t cn_md_comment; +}; +#if defined(__SUNPRO_C) + #pragma pack() +#elif !defined(__GNUC__) + #pragma pack(pop) +#endif + +/* "dataRead.pyx":129 + * uint64_t cn_md_comment + * + * cdef packed struct _CNData: # 72 bytes data section # <<<<<<<<<<<<<< + * uint8_t cn_type + * uint8_t cn_sync_type + */ +#if defined(__SUNPRO_C) + #pragma pack(1) +#elif !defined(__GNUC__) + #pragma pack(push, 1) +#endif +struct __Pyx_PACKED __pyx_t_8dataRead__CNData { + uint8_t cn_type; + uint8_t cn_sync_type; + uint8_t cn_data_type; + uint8_t cn_bit_offset; + uint32_t cn_byte_offset; + uint32_t cn_bit_count; + uint32_t cn_flags; + uint32_t cn_invalid_bit_pos; + uint8_t cn_precision; + uint8_t cn_reserved; + uint16_t cn_attachment_count; + double cn_val_range_min; + double cn_val_range_max; + double cn_limit_min; + double cn_limit_max; + double cn_limit_ext_min; + double cn_limit_ext_max; +}; +#if defined(__SUNPRO_C) + #pragma pack() +#elif !defined(__GNUC__) + #pragma pack(pop) +#endif + +/* "dataRead.pyx":148 + * double cn_limit_ext_max + * + * cdef packed struct _CCFixedHdr: # 56 bytes: 24-byte header + 4 standard links # <<<<<<<<<<<<<< + * char id[4] + * uint32_t reserved + */ +#if defined(__SUNPRO_C) + #pragma pack(1) +#elif !defined(__GNUC__) + #pragma pack(push, 1) +#endif +struct __Pyx_PACKED __pyx_t_8dataRead__CCFixedHdr { + char id[4]; + uint32_t reserved; + uint64_t length; + uint64_t link_count; + uint64_t cc_tx_name; + uint64_t cc_md_unit; + uint64_t cc_md_comment; + uint64_t cc_cc_inverse; +}; +#if defined(__SUNPRO_C) + #pragma pack() +#elif !defined(__GNUC__) + #pragma pack(pop) +#endif + +/* "dataRead.pyx":158 + * uint64_t cc_cc_inverse + * + * cdef packed struct _CCData: # 24 bytes data section # <<<<<<<<<<<<<< + * uint8_t cc_type + * uint8_t cc_precision + */ +#if defined(__SUNPRO_C) + #pragma pack(1) +#elif !defined(__GNUC__) + #pragma pack(push, 1) +#endif +struct __Pyx_PACKED __pyx_t_8dataRead__CCData { + uint8_t cc_type; + uint8_t cc_precision; + uint16_t cc_flags; + uint16_t cc_ref_count; + uint16_t cc_val_count; + double cc_phy_range_min; + double cc_phy_range_max; +}; +#if defined(__SUNPRO_C) + #pragma pack() +#elif !defined(__GNUC__) + #pragma pack(pop) +#endif + +/* "dataRead.pyx":167 + * double cc_phy_range_max + * + * cdef packed struct _SIBlock: # 56 bytes total (header + 3 links + data) # <<<<<<<<<<<<<< + * char id[4] + * uint32_t reserved + */ +#if defined(__SUNPRO_C) + #pragma pack(1) +#elif !defined(__GNUC__) + #pragma pack(push, 1) +#endif +struct __Pyx_PACKED __pyx_t_8dataRead__SIBlock { + char id[4]; + uint32_t reserved; + uint64_t length; + uint64_t link_count; + uint64_t si_tx_name; + uint64_t si_tx_path; + uint64_t si_md_comment; + uint8_t si_type; + uint8_t si_bus_type; + uint8_t si_flags; + char si_reserved[5]; +}; +#if defined(__SUNPRO_C) + #pragma pack() +#elif !defined(__GNUC__) + #pragma pack(pop) +#endif -/* "dataRead.pyx":25 +/* "dataRead.pyx":180 + * char si_reserved[5] + * + * cdef packed struct _TXHdr: # 24 bytes # <<<<<<<<<<<<<< + * char id[4] + * uint32_t reserved + */ +#if defined(__SUNPRO_C) + #pragma pack(1) +#elif !defined(__GNUC__) + #pragma pack(push, 1) +#endif +struct __Pyx_PACKED __pyx_t_8dataRead__TXHdr { + char id[4]; + uint32_t reserved; + uint64_t length; + uint64_t link_count; +}; +#if defined(__SUNPRO_C) + #pragma pack() +#elif !defined(__GNUC__) + #pragma pack(pop) +#endif + +/* "dataRead.pyx":26 * DEF SYM_BUF_SIZE = 65536 # 64 KB same default as Rust SymBufReader * * cdef class SymBufReader: # <<<<<<<<<<<<<< @@ -1975,7 +2169,7 @@ struct __pyx_memoryviewslice_obj { -/* "dataRead.pyx":25 +/* "dataRead.pyx":26 * DEF SYM_BUF_SIZE = 65536 # 64 KB same default as Rust SymBufReader * * cdef class SymBufReader: # <<<<<<<<<<<<<< @@ -2622,6 +2816,119 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); /* HasAttr.proto */ static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); +/* decode_c_string_utf16.proto */ +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = 0; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = -1; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} +static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) { + int byteorder = 1; + return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); +} + +/* decode_c_bytes.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( + const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); + +/* decode_bytes.proto */ +static CYTHON_INLINE PyObject* __Pyx_decode_bytes( + PyObject* string, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { + char* as_c_string; + Py_ssize_t size; +#if CYTHON_ASSUME_SAFE_MACROS + as_c_string = PyBytes_AS_STRING(string); + size = PyBytes_GET_SIZE(string); +#else + if (PyBytes_AsStringAndSize(string, &as_c_string, &size) < 0) { + return NULL; + } +#endif + return __Pyx_decode_c_bytes( + as_c_string, size, + start, stop, encoding, errors, decode_func); +} + +/* UnpackUnboundCMethod.proto */ +typedef struct { + PyObject *type; + PyObject **method_name; + PyCFunction func; + PyObject *method; + int flag; +} __Pyx_CachedCFunction; + +/* CallUnboundCMethod1.proto */ +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); +#else +#define __Pyx_CallUnboundCMethod1(cfunc, self, arg) __Pyx__CallUnboundCMethod1(cfunc, self, arg) +#endif + +/* CallUnboundCMethod2.proto */ +static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2); +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1 +static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2); +#else +#define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2) __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2) +#endif + +/* PyObject_Unicode.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyObject_Unicode(obj)\ + (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj)) +#else +#define __Pyx_PyObject_Unicode(obj)\ + (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Unicode(obj)) +#endif + +/* ListAppend.proto */ +#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS +static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { + PyListObject* L = (PyListObject*) list; + Py_ssize_t len = Py_SIZE(list); + if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { + Py_INCREF(x); + #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 + L->ob_item[len] = x; + #else + PyList_SET_ITEM(list, len, x); + #endif + __Pyx_SET_SIZE(list, len + 1); + return 0; + } + return PyList_Append(list, x); +} +#else +#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) +#endif + +/* SliceTupleAndList.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); +static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop); +#else +#define __Pyx_PyList_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop) +#define __Pyx_PyTuple_GetSlice(seq, start, stop) PySequence_GetSlice(seq, start, stop) +#endif + +/* PyDictContains.proto */ +static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) { + int result = PyDict_Contains(dict, item); + return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); +} + +/* dict_getitem_default.proto */ +static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value); + /* PyUnicodeContains.proto */ static CYTHON_INLINE int __Pyx_PyUnicode_ContainsTF(PyObject* substring, PyObject* text, int eq) { int result = PyUnicode_Contains(text, substring); @@ -2706,23 +3013,6 @@ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); -/* UnpackUnboundCMethod.proto */ -typedef struct { - PyObject *type; - PyObject **method_name; - PyCFunction func; - PyObject *method; - int flag; -} __Pyx_CachedCFunction; - -/* CallUnboundCMethod1.proto */ -static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); -#else -#define __Pyx_CallUnboundCMethod1(cfunc, self, arg) __Pyx__CallUnboundCMethod1(cfunc, self, arg) -#endif - /* PyIntBinop.proto */ #if !CYTHON_COMPILING_IN_PYPY static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check); @@ -2734,67 +3024,6 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, /* PyIntCompare.proto */ static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); -/* decode_c_string_utf16.proto */ -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = 0; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = -1; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = 1; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} - -/* decode_c_bytes.proto */ -static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( - const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); - -/* decode_bytes.proto */ -static CYTHON_INLINE PyObject* __Pyx_decode_bytes( - PyObject* string, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - char* as_c_string; - Py_ssize_t size; -#if CYTHON_ASSUME_SAFE_MACROS - as_c_string = PyBytes_AS_STRING(string); - size = PyBytes_GET_SIZE(string); -#else - if (PyBytes_AsStringAndSize(string, &as_c_string, &size) < 0) { - return NULL; - } -#endif - return __Pyx_decode_c_bytes( - as_c_string, size, - start, stop, encoding, errors, decode_func); -} - -/* ListAppend.proto */ -#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS -static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { - Py_INCREF(x); - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 - L->ob_item[len] = x; - #else - PyList_SET_ITEM(list, len, x); - #endif - __Pyx_SET_SIZE(list, len + 1); - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) -#endif - /* PyObjectCall2Args.proto */ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); @@ -3263,6 +3492,9 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *, int, int); /* CIntFromPy.proto */ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); +/* CIntFromPy.proto */ +static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *); + /* CIntFromPy.proto */ static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *); @@ -3276,11 +3508,29 @@ static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *); static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); /* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value); +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint8_t(uint8_t value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value); /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value); +/* CIntFromPy.proto */ +static CYTHON_INLINE uint32_t __Pyx_PyInt_As_uint32_t(PyObject *); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value); + /* CIntFromPy.proto */ static CYTHON_INLINE uint16_t __Pyx_PyInt_As_uint16_t(PyObject *); @@ -3293,9 +3543,6 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char valu /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value); -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - /* CIntToPy.proto */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); @@ -3380,6 +3627,10 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym /* Module declarations from "cpython.bytes" */ +/* Module declarations from "posix.types" */ + +/* Module declarations from "posix.unistd" */ + /* Module declarations from "cython.view" */ /* Module declarations from "cython.dataclasses" */ @@ -3395,6 +3646,9 @@ static PyObject *contiguous = 0; static PyObject *indirect_contiguous = 0; static int __pyx_memoryview_thread_locks_used; static PyThread_type_lock __pyx_memoryview_thread_locks[8]; +static PyObject *__pyx_f_8dataRead__fast_read_tx(int, uint64_t); /*proto*/ +static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int, uint64_t); /*proto*/ +static PyObject *__pyx_f_8dataRead__fast_read_si(int, uint64_t); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *, PyObject *, unsigned PY_LONG_LONG, unsigned long, unsigned long, unsigned char); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *, PyObject *, unsigned PY_LONG_LONG, unsigned long, unsigned long, unsigned char); /*proto*/ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *, PyObject *, unsigned PY_LONG_LONG, unsigned long, unsigned long, unsigned char); /*proto*/ @@ -3473,6 +3727,7 @@ int __pyx_module_is_main_dataRead = 0; /* Implementation of "dataRead" */ /* #### Code section: global_var ### */ +static PyObject *__pyx_builtin_AttributeError; static PyObject *__pyx_builtin_range; static PyObject *__pyx_builtin_MemoryError; static PyObject *__pyx_builtin_TypeError; @@ -3494,18 +3749,31 @@ static const char __pyx_k_U[] = "U{}"; static const char __pyx_k_V[] = "V"; static const char __pyx_k_c[] = "c"; static const char __pyx_k_i[] = "i"; +static const char __pyx_k_m[] = "m"; static const char __pyx_k_n[] = "n"; +static const char __pyx_k_s[] = "s"; +static const char __pyx_k_CC[] = "##CC"; +static const char __pyx_k_CN[] = "##CN"; +static const char __pyx_k_SI[] = "##SI"; +static const char __pyx_k_TX[] = ""; static const char __pyx_k__2[] = "."; static const char __pyx_k__3[] = "*"; static const char __pyx_k__6[] = "'"; static const char __pyx_k__7[] = ")"; +static const char __pyx_k_fd[] = "fd"; static const char __pyx_k_gc[] = "gc"; static const char __pyx_k_id[] = "id"; static const char __pyx_k_np[] = "np"; +static const char __pyx_k_BUS[] = "BUS"; +static const char __pyx_k_CAN[] = "CAN"; +static const char __pyx_k_ECU[] = "ECU"; +static const char __pyx_k_I_O[] = "I/O"; +static const char __pyx_k_LIN[] = "LIN"; +static const char __pyx_k_USB[] = "USB"; static const char __pyx_k_V_2[] = "V{}"; static const char __pyx_k__12[] = ""; static const char __pyx_k__13[] = "\000"; -static const char __pyx_k__51[] = "?"; +static const char __pyx_k__53[] = "?"; static const char __pyx_k_abc[] = "abc"; static const char __pyx_k_and[] = " and "; static const char __pyx_k_big[] = "big"; @@ -3513,19 +3781,31 @@ static const char __pyx_k_bom[] = "bom"; static const char __pyx_k_buf[] = "buf"; static const char __pyx_k_end[] = "end"; static const char __pyx_k_fid[] = "fid"; +static const char __pyx_k_get[] = "get"; static const char __pyx_k_got[] = " (got "; +static const char __pyx_k_lnk[] = "lnk"; static const char __pyx_k_new[] = "__new__"; static const char __pyx_k_obj[] = "obj"; static const char __pyx_k_pos[] = "pos"; +static const char __pyx_k_rad[] = "rad"; static const char __pyx_k_rec[] = "rec"; static const char __pyx_k_sys[] = "sys"; static const char __pyx_k_tmp[] = "tmp"; +static const char __pyx_k_MOST[] = "MOST"; +static const char __pyx_k_NONE[] = "NONE"; +static const char __pyx_k_SI_2[] = "SI"; +static const char __pyx_k_TOOL[] = "TOOL"; +static const char __pyx_k_TX_2[] = ""; +static const char __pyx_k_TX_3[] = "TX"; +static const char __pyx_k_USER[] = "USER"; static const char __pyx_k_VLSD[] = "VLSD"; static const char __pyx_k_base[] = "base"; static const char __pyx_k_data[] = "data"; static const char __pyx_k_dict[] = "__dict__"; +static const char __pyx_k_find[] = "find"; static const char __pyx_k_info[] = "info"; static const char __pyx_k_keys[] = "keys"; +static const char __pyx_k_lxml[] = "lxml"; static const char __pyx_k_main[] = "__main__"; static const char __pyx_k_mode[] = "mode"; static const char __pyx_k_name[] = "name"; @@ -3540,9 +3820,11 @@ static const char __pyx_k_step[] = "step"; static const char __pyx_k_stop[] = "stop"; static const char __pyx_k_tell[] = "tell"; static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_unit[] = "unit"; static const char __pyx_k_view[] = "view"; static const char __pyx_k_ASCII[] = "ASCII"; static const char __pyx_k_Flags[] = "Flags"; +static const char __pyx_k_OTHER[] = "OTHER"; static const char __pyx_k_array[] = "array"; static const char __pyx_k_class[] = "__class__"; static const char __pyx_k_count[] = "count"; @@ -3551,6 +3833,7 @@ static const char __pyx_k_empty[] = "empty"; static const char __pyx_k_error[] = "error"; static const char __pyx_k_flags[] = "flags"; static const char __pyx_k_index[] = "index"; +static const char __pyx_k_nread[] = "nread"; static const char __pyx_k_numpy[] = "numpy"; static const char __pyx_k_order[] = "order"; static const char __pyx_k_range[] = "range"; @@ -3560,7 +3843,16 @@ static const char __pyx_k_start[] = "start"; static const char __pyx_k_state[] = "state"; static const char __pyx_k_utf_8[] = "utf-8"; static const char __pyx_k_zeros[] = "zeros"; +static const char __pyx_k_CNunit[] = "CNunit"; +static const char __pyx_k_K_LINE[] = "K_LINE"; static const char __pyx_k_append[] = "append"; +static const char __pyx_k_cc_dat[] = "cc_dat"; +static const char __pyx_k_cc_hdr[] = "cc_hdr"; +static const char __pyx_k_cc_ptr[] = "cc_ptr"; +static const char __pyx_k_cc_val[] = "cc_val"; +static const char __pyx_k_cn_dat[] = "cn_dat"; +static const char __pyx_k_cn_hdr[] = "cn_hdr"; +static const char __pyx_k_cn_key[] = "cn_key"; static const char __pyx_k_decode[] = "decode"; static const char __pyx_k_dict_2[] = "_dict"; static const char __pyx_k_enable[] = "enable"; @@ -3569,6 +3861,7 @@ static const char __pyx_k_errors[] = "errors"; static const char __pyx_k_fileno[] = "fileno"; static const char __pyx_k_format[] = "format"; static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_length[] = "length"; static const char __pyx_k_little[] = "little"; static const char __pyx_k_name_2[] = "__name__"; static const char __pyx_k_offset[] = "offset"; @@ -3576,6 +3869,7 @@ static const char __pyx_k_pickle[] = "pickle"; static const char __pyx_k_record[] = "record"; static const char __pyx_k_reduce[] = "__reduce__"; static const char __pyx_k_rstrip[] = "rstrip"; +static const char __pyx_k_si_ptr[] = "si_ptr"; static const char __pyx_k_struct[] = "struct"; static const char __pyx_k_uint16[] = "uint16"; static const char __pyx_k_unpack[] = "unpack"; @@ -3584,24 +3878,42 @@ static const char __pyx_k_utf_16[] = "__pyx_n_s_ASCII); Py_CLEAR(clear_module_state->__pyx_kp_s_All_dimensions_preceding_dimensi); Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError); + Py_CLEAR(clear_module_state->__pyx_n_s_AttributeError); + Py_CLEAR(clear_module_state->__pyx_n_u_BUS); Py_CLEAR(clear_module_state->__pyx_kp_s_Buffer_view_does_not_expose_stri); Py_CLEAR(clear_module_state->__pyx_n_u_C); + Py_CLEAR(clear_module_state->__pyx_n_u_CAN); + Py_CLEAR(clear_module_state->__pyx_kp_b_CC); Py_CLEAR(clear_module_state->__pyx_n_s_CGrecordLength); + Py_CLEAR(clear_module_state->__pyx_kp_b_CN); + Py_CLEAR(clear_module_state->__pyx_n_s_CNcomment); + Py_CLEAR(clear_module_state->__pyx_n_s_CNunit); Py_CLEAR(clear_module_state->__pyx_kp_s_Can_only_create_a_buffer_that_is); Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_assign_to_read_only_memor); Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_create_writable_memory_vi); Py_CLEAR(clear_module_state->__pyx_kp_u_Cannot_index_with_type); Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_transpose_memoryview_with); Py_CLEAR(clear_module_state->__pyx_n_s_Channel); + Py_CLEAR(clear_module_state->__pyx_n_u_Comment); Py_CLEAR(clear_module_state->__pyx_kp_s_Dimension_d_is_not_direct); + Py_CLEAR(clear_module_state->__pyx_n_u_ECU); + Py_CLEAR(clear_module_state->__pyx_n_u_ETHERNET); Py_CLEAR(clear_module_state->__pyx_n_s_Ellipsis); Py_CLEAR(clear_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr); + Py_CLEAR(clear_module_state->__pyx_n_u_FLEXRAY); Py_CLEAR(clear_module_state->__pyx_n_s_Flags); Py_CLEAR(clear_module_state->__pyx_n_u_ISO8859); Py_CLEAR(clear_module_state->__pyx_kp_u_ISO_8859_1); + Py_CLEAR(clear_module_state->__pyx_kp_u_I_O); Py_CLEAR(clear_module_state->__pyx_n_s_ImportError); Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); @@ -4287,14 +4799,23 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte); Py_CLEAR(clear_module_state->__pyx_kp_u_Invalid_mode_expected_c_or_fortr); Py_CLEAR(clear_module_state->__pyx_kp_u_Invalid_shape_in_axis); + Py_CLEAR(clear_module_state->__pyx_n_u_K_LINE); + Py_CLEAR(clear_module_state->__pyx_n_u_LIN); + Py_CLEAR(clear_module_state->__pyx_n_u_MOST); Py_CLEAR(clear_module_state->__pyx_n_s_MemoryError); Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_at_0x_x); Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_object); + Py_CLEAR(clear_module_state->__pyx_n_u_NONE); Py_CLEAR(clear_module_state->__pyx_n_b_O); + Py_CLEAR(clear_module_state->__pyx_n_u_OTHER); Py_CLEAR(clear_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a); Py_CLEAR(clear_module_state->__pyx_n_s_OverflowError); Py_CLEAR(clear_module_state->__pyx_n_s_PickleError); Py_CLEAR(clear_module_state->__pyx_n_u_S); + Py_CLEAR(clear_module_state->__pyx_kp_b_SI); + Py_CLEAR(clear_module_state->__pyx_n_u_SI_2); + Py_CLEAR(clear_module_state->__pyx_n_s_SI_BUS_MAP); + Py_CLEAR(clear_module_state->__pyx_n_s_SI_TYPE_MAP); Py_CLEAR(clear_module_state->__pyx_n_s_Sequence); Py_CLEAR(clear_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d); Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader); @@ -4304,8 +4825,14 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader_read); Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader_seek); Py_CLEAR(clear_module_state->__pyx_n_s_SymBufReader_tell); + Py_CLEAR(clear_module_state->__pyx_n_u_TOOL); + Py_CLEAR(clear_module_state->__pyx_kp_b_TX); + Py_CLEAR(clear_module_state->__pyx_kp_b_TX_2); + Py_CLEAR(clear_module_state->__pyx_n_s_TX_3); Py_CLEAR(clear_module_state->__pyx_n_s_TypeError); Py_CLEAR(clear_module_state->__pyx_kp_u_U); + Py_CLEAR(clear_module_state->__pyx_n_u_USB); + Py_CLEAR(clear_module_state->__pyx_n_u_USER); Py_CLEAR(clear_module_state->__pyx_kp_s_Unable_to_convert_item_to_object); Py_CLEAR(clear_module_state->__pyx_n_u_V); Py_CLEAR(clear_module_state->__pyx_n_s_VLSD); @@ -4318,11 +4845,12 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_ValueError); Py_CLEAR(clear_module_state->__pyx_n_s_View_MemoryView); Py_CLEAR(clear_module_state->__pyx_kp_b__12); + Py_CLEAR(clear_module_state->__pyx_kp_u__12); Py_CLEAR(clear_module_state->__pyx_kp_b__13); Py_CLEAR(clear_module_state->__pyx_kp_u__13); Py_CLEAR(clear_module_state->__pyx_kp_u__2); Py_CLEAR(clear_module_state->__pyx_n_s__3); - Py_CLEAR(clear_module_state->__pyx_n_s__51); + Py_CLEAR(clear_module_state->__pyx_n_s__53); Py_CLEAR(clear_module_state->__pyx_kp_u__6); Py_CLEAR(clear_module_state->__pyx_kp_u__7); Py_CLEAR(clear_module_state->__pyx_n_s_abc); @@ -4348,15 +4876,65 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_c); Py_CLEAR(clear_module_state->__pyx_n_u_c); Py_CLEAR(clear_module_state->__pyx_n_s_c_format_structure); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_cc_inverse); + Py_CLEAR(clear_module_state->__pyx_n_s_cc_dat); + Py_CLEAR(clear_module_state->__pyx_n_s_cc_data_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_cc_dict); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_flags); + Py_CLEAR(clear_module_state->__pyx_n_s_cc_hdr); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_md_comment); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_md_unit); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_phy_range_max); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_phy_range_min); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_precision); + Py_CLEAR(clear_module_state->__pyx_n_s_cc_ptr); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_ref_count); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_tx_name); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_type); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_val); + Py_CLEAR(clear_module_state->__pyx_n_s_cc_val_buf); + Py_CLEAR(clear_module_state->__pyx_n_u_cc_val_count); + Py_CLEAR(clear_module_state->__pyx_n_s_cc_val_list); Py_CLEAR(clear_module_state->__pyx_n_u_channel); Py_CLEAR(clear_module_state->__pyx_n_u_channelName); Py_CLEAR(clear_module_state->__pyx_n_s_channelNames); Py_CLEAR(clear_module_state->__pyx_n_s_channel_format); Py_CLEAR(clear_module_state->__pyx_n_s_channel_name); + Py_CLEAR(clear_module_state->__pyx_n_s_channel_name_list); Py_CLEAR(clear_module_state->__pyx_n_s_channel_name_set); Py_CLEAR(clear_module_state->__pyx_n_s_class); Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem); Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_at_reference); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_attachment_count); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_bit_count); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_bit_offset); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_byte_offset); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_cc_conversion); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_cn_next); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_composition); + Py_CLEAR(clear_module_state->__pyx_n_s_cn_dat); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_data); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_data_type); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_default_x); + Py_CLEAR(clear_module_state->__pyx_n_s_cn_dict); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_flags); + Py_CLEAR(clear_module_state->__pyx_n_s_cn_hdr); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_invalid_bit_pos); + Py_CLEAR(clear_module_state->__pyx_n_s_cn_key); + Py_CLEAR(clear_module_state->__pyx_n_s_cn_key_neg); + Py_CLEAR(clear_module_state->__pyx_n_s_cn_key_uint); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_md_comment); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_md_unit); + Py_CLEAR(clear_module_state->__pyx_n_s_cn_name); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_precision); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_reserved); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_si_source); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_sync_type); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_tx_name); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_type); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_val_range_max); + Py_CLEAR(clear_module_state->__pyx_n_u_cn_val_range_min); Py_CLEAR(clear_module_state->__pyx_n_s_collections); Py_CLEAR(clear_module_state->__pyx_kp_s_collections_abc); Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_direct); @@ -4367,7 +4945,11 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_kp_s_dataRead_pyx); Py_CLEAR(clear_module_state->__pyx_n_s_data_block_length); Py_CLEAR(clear_module_state->__pyx_n_s_data_format); + Py_CLEAR(clear_module_state->__pyx_n_s_data_offset); + Py_CLEAR(clear_module_state->__pyx_n_s_dbl_ptr); Py_CLEAR(clear_module_state->__pyx_n_s_decode); + Py_CLEAR(clear_module_state->__pyx_n_s_desc_str); + Py_CLEAR(clear_module_state->__pyx_n_u_description); Py_CLEAR(clear_module_state->__pyx_n_s_dict); Py_CLEAR(clear_module_state->__pyx_n_s_dict_2); Py_CLEAR(clear_module_state->__pyx_kp_u_disable); @@ -4380,20 +4962,28 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_enumerate); Py_CLEAR(clear_module_state->__pyx_n_s_error); Py_CLEAR(clear_module_state->__pyx_n_s_errors); + Py_CLEAR(clear_module_state->__pyx_n_s_extra_buf); + Py_CLEAR(clear_module_state->__pyx_n_s_extra_links); + Py_CLEAR(clear_module_state->__pyx_n_s_fd); Py_CLEAR(clear_module_state->__pyx_n_s_fid); Py_CLEAR(clear_module_state->__pyx_n_s_fileno); + Py_CLEAR(clear_module_state->__pyx_n_s_find); + Py_CLEAR(clear_module_state->__pyx_n_s_first_pointer); Py_CLEAR(clear_module_state->__pyx_n_s_flags); Py_CLEAR(clear_module_state->__pyx_n_s_float16); Py_CLEAR(clear_module_state->__pyx_n_s_format); Py_CLEAR(clear_module_state->__pyx_n_s_fortran); Py_CLEAR(clear_module_state->__pyx_n_u_fortran); Py_CLEAR(clear_module_state->__pyx_n_s_frombuffer); + Py_CLEAR(clear_module_state->__pyx_n_s_fromstring); Py_CLEAR(clear_module_state->__pyx_kp_u_gc); + Py_CLEAR(clear_module_state->__pyx_n_s_get); Py_CLEAR(clear_module_state->__pyx_n_s_getstate); Py_CLEAR(clear_module_state->__pyx_kp_u_got); Py_CLEAR(clear_module_state->__pyx_kp_u_got_differing_extents_in_dimensi); Py_CLEAR(clear_module_state->__pyx_n_s_i); Py_CLEAR(clear_module_state->__pyx_n_s_id); + Py_CLEAR(clear_module_state->__pyx_n_u_id); Py_CLEAR(clear_module_state->__pyx_n_s_import); Py_CLEAR(clear_module_state->__pyx_n_s_index); Py_CLEAR(clear_module_state->__pyx_n_s_info); @@ -4403,21 +4993,31 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_itemsize); Py_CLEAR(clear_module_state->__pyx_kp_s_itemsize_0_for_cython_array); Py_CLEAR(clear_module_state->__pyx_n_s_keys); + Py_CLEAR(clear_module_state->__pyx_n_u_length); + Py_CLEAR(clear_module_state->__pyx_n_u_link_count); Py_CLEAR(clear_module_state->__pyx_n_u_little); + Py_CLEAR(clear_module_state->__pyx_n_s_lnk); + Py_CLEAR(clear_module_state->__pyx_n_s_lxml); + Py_CLEAR(clear_module_state->__pyx_n_u_m); Py_CLEAR(clear_module_state->__pyx_n_s_main); Py_CLEAR(clear_module_state->__pyx_n_s_max_len); Py_CLEAR(clear_module_state->__pyx_n_s_memview); + Py_CLEAR(clear_module_state->__pyx_n_s_minimal); Py_CLEAR(clear_module_state->__pyx_n_s_mode); Py_CLEAR(clear_module_state->__pyx_n_s_n); Py_CLEAR(clear_module_state->__pyx_n_s_nBytes_aligned); Py_CLEAR(clear_module_state->__pyx_n_s_n_bytes); + Py_CLEAR(clear_module_state->__pyx_n_s_n_extra); Py_CLEAR(clear_module_state->__pyx_n_s_n_records); Py_CLEAR(clear_module_state->__pyx_n_s_name); + Py_CLEAR(clear_module_state->__pyx_n_u_name); Py_CLEAR(clear_module_state->__pyx_n_s_name_2); Py_CLEAR(clear_module_state->__pyx_n_s_ndim); + Py_CLEAR(clear_module_state->__pyx_n_u_needs_completion); Py_CLEAR(clear_module_state->__pyx_n_s_new); Py_CLEAR(clear_module_state->__pyx_kp_s_no_default___reduce___due_to_non); Py_CLEAR(clear_module_state->__pyx_n_s_np); + Py_CLEAR(clear_module_state->__pyx_n_s_nread); Py_CLEAR(clear_module_state->__pyx_n_s_numberOfRecords); Py_CLEAR(clear_module_state->__pyx_n_s_number_of_records); Py_CLEAR(clear_module_state->__pyx_n_s_numpy); @@ -4425,12 +5025,14 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); Py_CLEAR(clear_module_state->__pyx_n_s_numpy_format); Py_CLEAR(clear_module_state->__pyx_n_s_obj); + Py_CLEAR(clear_module_state->__pyx_n_s_objectify); Py_CLEAR(clear_module_state->__pyx_n_s_offset); Py_CLEAR(clear_module_state->__pyx_n_s_offsets_array); Py_CLEAR(clear_module_state->__pyx_n_s_order); Py_CLEAR(clear_module_state->__pyx_n_s_pack); Py_CLEAR(clear_module_state->__pyx_n_s_pickle); Py_CLEAR(clear_module_state->__pyx_n_s_pointer); + Py_CLEAR(clear_module_state->__pyx_n_u_pointer); Py_CLEAR(clear_module_state->__pyx_n_s_pos); Py_CLEAR(clear_module_state->__pyx_n_s_pos_byte_beg); Py_CLEAR(clear_module_state->__pyx_n_s_pos_byte_end); @@ -4443,8 +5045,10 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_Enum); Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_SymBufReader); Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable); + Py_CLEAR(clear_module_state->__pyx_n_u_rad); Py_CLEAR(clear_module_state->__pyx_n_s_range); Py_CLEAR(clear_module_state->__pyx_n_s_read); + Py_CLEAR(clear_module_state->__pyx_n_s_read_cn_chain_fast); Py_CLEAR(clear_module_state->__pyx_n_s_rec); Py_CLEAR(clear_module_state->__pyx_n_s_record); Py_CLEAR(clear_module_state->__pyx_n_u_record); @@ -4461,8 +5065,10 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex); Py_CLEAR(clear_module_state->__pyx_n_s_register); Py_CLEAR(clear_module_state->__pyx_n_u_replace); + Py_CLEAR(clear_module_state->__pyx_n_s_results); Py_CLEAR(clear_module_state->__pyx_n_s_rjust); Py_CLEAR(clear_module_state->__pyx_n_s_rstrip); + Py_CLEAR(clear_module_state->__pyx_n_u_s); Py_CLEAR(clear_module_state->__pyx_n_s_sd_block); Py_CLEAR(clear_module_state->__pyx_n_s_sd_block_length); Py_CLEAR(clear_module_state->__pyx_n_s_sd_data_read); @@ -4471,10 +5077,21 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_setstate); Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython); Py_CLEAR(clear_module_state->__pyx_n_s_shape); + Py_CLEAR(clear_module_state->__pyx_n_u_si_bus_type); + Py_CLEAR(clear_module_state->__pyx_n_s_si_cache); + Py_CLEAR(clear_module_state->__pyx_n_s_si_dict); + Py_CLEAR(clear_module_state->__pyx_n_u_si_flags); + Py_CLEAR(clear_module_state->__pyx_n_u_si_md_comment); + Py_CLEAR(clear_module_state->__pyx_n_s_si_ptr); + Py_CLEAR(clear_module_state->__pyx_n_u_si_tx_name); + Py_CLEAR(clear_module_state->__pyx_n_u_si_tx_path); + Py_CLEAR(clear_module_state->__pyx_n_u_si_type); Py_CLEAR(clear_module_state->__pyx_n_s_signal_data_type); Py_CLEAR(clear_module_state->__pyx_n_s_size); Py_CLEAR(clear_module_state->__pyx_n_s_sizes_array); Py_CLEAR(clear_module_state->__pyx_n_s_sorted_data_read); + Py_CLEAR(clear_module_state->__pyx_n_u_source_name); + Py_CLEAR(clear_module_state->__pyx_n_u_source_path); Py_CLEAR(clear_module_state->__pyx_n_s_spec); Py_CLEAR(clear_module_state->__pyx_n_s_start); Py_CLEAR(clear_module_state->__pyx_n_s_state); @@ -4493,6 +5110,8 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_n_s_uint16); Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_array_data); Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str); + Py_CLEAR(clear_module_state->__pyx_n_u_unit); + Py_CLEAR(clear_module_state->__pyx_n_s_unit_str); Py_CLEAR(clear_module_state->__pyx_n_s_unpack); Py_CLEAR(clear_module_state->__pyx_n_s_unsorted_data_read4); Py_CLEAR(clear_module_state->__pyx_n_s_update); @@ -4514,6 +5133,8 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_int_1); Py_CLEAR(clear_module_state->__pyx_int_2); Py_CLEAR(clear_module_state->__pyx_int_3); + Py_CLEAR(clear_module_state->__pyx_int_4); + Py_CLEAR(clear_module_state->__pyx_int_5); Py_CLEAR(clear_module_state->__pyx_int_6); Py_CLEAR(clear_module_state->__pyx_int_7); Py_CLEAR(clear_module_state->__pyx_int_8); @@ -4563,6 +5184,7 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_tuple__44); Py_CLEAR(clear_module_state->__pyx_tuple__46); Py_CLEAR(clear_module_state->__pyx_tuple__48); + Py_CLEAR(clear_module_state->__pyx_tuple__50); Py_CLEAR(clear_module_state->__pyx_codeobj__29); Py_CLEAR(clear_module_state->__pyx_codeobj__31); Py_CLEAR(clear_module_state->__pyx_codeobj__34); @@ -4574,7 +5196,8 @@ static int __pyx_m_clear(PyObject *m) { Py_CLEAR(clear_module_state->__pyx_codeobj__45); Py_CLEAR(clear_module_state->__pyx_codeobj__47); Py_CLEAR(clear_module_state->__pyx_codeobj__49); - Py_CLEAR(clear_module_state->__pyx_codeobj__50); + Py_CLEAR(clear_module_state->__pyx_codeobj__51); + Py_CLEAR(clear_module_state->__pyx_codeobj__52); return 0; } #endif @@ -4625,21 +5248,33 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_ASCII); Py_VISIT(traverse_module_state->__pyx_kp_s_All_dimensions_preceding_dimensi); Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError); + Py_VISIT(traverse_module_state->__pyx_n_s_AttributeError); + Py_VISIT(traverse_module_state->__pyx_n_u_BUS); Py_VISIT(traverse_module_state->__pyx_kp_s_Buffer_view_does_not_expose_stri); Py_VISIT(traverse_module_state->__pyx_n_u_C); + Py_VISIT(traverse_module_state->__pyx_n_u_CAN); + Py_VISIT(traverse_module_state->__pyx_kp_b_CC); Py_VISIT(traverse_module_state->__pyx_n_s_CGrecordLength); + Py_VISIT(traverse_module_state->__pyx_kp_b_CN); + Py_VISIT(traverse_module_state->__pyx_n_s_CNcomment); + Py_VISIT(traverse_module_state->__pyx_n_s_CNunit); Py_VISIT(traverse_module_state->__pyx_kp_s_Can_only_create_a_buffer_that_is); Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_assign_to_read_only_memor); Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_create_writable_memory_vi); Py_VISIT(traverse_module_state->__pyx_kp_u_Cannot_index_with_type); Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_transpose_memoryview_with); Py_VISIT(traverse_module_state->__pyx_n_s_Channel); + Py_VISIT(traverse_module_state->__pyx_n_u_Comment); Py_VISIT(traverse_module_state->__pyx_kp_s_Dimension_d_is_not_direct); + Py_VISIT(traverse_module_state->__pyx_n_u_ECU); + Py_VISIT(traverse_module_state->__pyx_n_u_ETHERNET); Py_VISIT(traverse_module_state->__pyx_n_s_Ellipsis); Py_VISIT(traverse_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr); + Py_VISIT(traverse_module_state->__pyx_n_u_FLEXRAY); Py_VISIT(traverse_module_state->__pyx_n_s_Flags); Py_VISIT(traverse_module_state->__pyx_n_u_ISO8859); Py_VISIT(traverse_module_state->__pyx_kp_u_ISO_8859_1); + Py_VISIT(traverse_module_state->__pyx_kp_u_I_O); Py_VISIT(traverse_module_state->__pyx_n_s_ImportError); Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0); Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2); @@ -4648,14 +5283,23 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte); Py_VISIT(traverse_module_state->__pyx_kp_u_Invalid_mode_expected_c_or_fortr); Py_VISIT(traverse_module_state->__pyx_kp_u_Invalid_shape_in_axis); + Py_VISIT(traverse_module_state->__pyx_n_u_K_LINE); + Py_VISIT(traverse_module_state->__pyx_n_u_LIN); + Py_VISIT(traverse_module_state->__pyx_n_u_MOST); Py_VISIT(traverse_module_state->__pyx_n_s_MemoryError); Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_at_0x_x); Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_object); + Py_VISIT(traverse_module_state->__pyx_n_u_NONE); Py_VISIT(traverse_module_state->__pyx_n_b_O); + Py_VISIT(traverse_module_state->__pyx_n_u_OTHER); Py_VISIT(traverse_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a); Py_VISIT(traverse_module_state->__pyx_n_s_OverflowError); Py_VISIT(traverse_module_state->__pyx_n_s_PickleError); Py_VISIT(traverse_module_state->__pyx_n_u_S); + Py_VISIT(traverse_module_state->__pyx_kp_b_SI); + Py_VISIT(traverse_module_state->__pyx_n_u_SI_2); + Py_VISIT(traverse_module_state->__pyx_n_s_SI_BUS_MAP); + Py_VISIT(traverse_module_state->__pyx_n_s_SI_TYPE_MAP); Py_VISIT(traverse_module_state->__pyx_n_s_Sequence); Py_VISIT(traverse_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d); Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader); @@ -4665,8 +5309,14 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader_read); Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader_seek); Py_VISIT(traverse_module_state->__pyx_n_s_SymBufReader_tell); + Py_VISIT(traverse_module_state->__pyx_n_u_TOOL); + Py_VISIT(traverse_module_state->__pyx_kp_b_TX); + Py_VISIT(traverse_module_state->__pyx_kp_b_TX_2); + Py_VISIT(traverse_module_state->__pyx_n_s_TX_3); Py_VISIT(traverse_module_state->__pyx_n_s_TypeError); Py_VISIT(traverse_module_state->__pyx_kp_u_U); + Py_VISIT(traverse_module_state->__pyx_n_u_USB); + Py_VISIT(traverse_module_state->__pyx_n_u_USER); Py_VISIT(traverse_module_state->__pyx_kp_s_Unable_to_convert_item_to_object); Py_VISIT(traverse_module_state->__pyx_n_u_V); Py_VISIT(traverse_module_state->__pyx_n_s_VLSD); @@ -4679,11 +5329,12 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_ValueError); Py_VISIT(traverse_module_state->__pyx_n_s_View_MemoryView); Py_VISIT(traverse_module_state->__pyx_kp_b__12); + Py_VISIT(traverse_module_state->__pyx_kp_u__12); Py_VISIT(traverse_module_state->__pyx_kp_b__13); Py_VISIT(traverse_module_state->__pyx_kp_u__13); Py_VISIT(traverse_module_state->__pyx_kp_u__2); Py_VISIT(traverse_module_state->__pyx_n_s__3); - Py_VISIT(traverse_module_state->__pyx_n_s__51); + Py_VISIT(traverse_module_state->__pyx_n_s__53); Py_VISIT(traverse_module_state->__pyx_kp_u__6); Py_VISIT(traverse_module_state->__pyx_kp_u__7); Py_VISIT(traverse_module_state->__pyx_n_s_abc); @@ -4709,15 +5360,65 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_c); Py_VISIT(traverse_module_state->__pyx_n_u_c); Py_VISIT(traverse_module_state->__pyx_n_s_c_format_structure); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_cc_inverse); + Py_VISIT(traverse_module_state->__pyx_n_s_cc_dat); + Py_VISIT(traverse_module_state->__pyx_n_s_cc_data_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_cc_dict); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_flags); + Py_VISIT(traverse_module_state->__pyx_n_s_cc_hdr); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_md_comment); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_md_unit); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_phy_range_max); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_phy_range_min); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_precision); + Py_VISIT(traverse_module_state->__pyx_n_s_cc_ptr); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_ref_count); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_tx_name); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_type); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_val); + Py_VISIT(traverse_module_state->__pyx_n_s_cc_val_buf); + Py_VISIT(traverse_module_state->__pyx_n_u_cc_val_count); + Py_VISIT(traverse_module_state->__pyx_n_s_cc_val_list); Py_VISIT(traverse_module_state->__pyx_n_u_channel); Py_VISIT(traverse_module_state->__pyx_n_u_channelName); Py_VISIT(traverse_module_state->__pyx_n_s_channelNames); Py_VISIT(traverse_module_state->__pyx_n_s_channel_format); Py_VISIT(traverse_module_state->__pyx_n_s_channel_name); + Py_VISIT(traverse_module_state->__pyx_n_s_channel_name_list); Py_VISIT(traverse_module_state->__pyx_n_s_channel_name_set); Py_VISIT(traverse_module_state->__pyx_n_s_class); Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem); Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_at_reference); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_attachment_count); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_bit_count); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_bit_offset); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_byte_offset); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_cc_conversion); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_cn_next); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_composition); + Py_VISIT(traverse_module_state->__pyx_n_s_cn_dat); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_data); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_data_type); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_default_x); + Py_VISIT(traverse_module_state->__pyx_n_s_cn_dict); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_flags); + Py_VISIT(traverse_module_state->__pyx_n_s_cn_hdr); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_invalid_bit_pos); + Py_VISIT(traverse_module_state->__pyx_n_s_cn_key); + Py_VISIT(traverse_module_state->__pyx_n_s_cn_key_neg); + Py_VISIT(traverse_module_state->__pyx_n_s_cn_key_uint); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_md_comment); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_md_unit); + Py_VISIT(traverse_module_state->__pyx_n_s_cn_name); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_precision); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_reserved); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_si_source); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_sync_type); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_tx_name); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_type); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_val_range_max); + Py_VISIT(traverse_module_state->__pyx_n_u_cn_val_range_min); Py_VISIT(traverse_module_state->__pyx_n_s_collections); Py_VISIT(traverse_module_state->__pyx_kp_s_collections_abc); Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_direct); @@ -4728,7 +5429,11 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_kp_s_dataRead_pyx); Py_VISIT(traverse_module_state->__pyx_n_s_data_block_length); Py_VISIT(traverse_module_state->__pyx_n_s_data_format); + Py_VISIT(traverse_module_state->__pyx_n_s_data_offset); + Py_VISIT(traverse_module_state->__pyx_n_s_dbl_ptr); Py_VISIT(traverse_module_state->__pyx_n_s_decode); + Py_VISIT(traverse_module_state->__pyx_n_s_desc_str); + Py_VISIT(traverse_module_state->__pyx_n_u_description); Py_VISIT(traverse_module_state->__pyx_n_s_dict); Py_VISIT(traverse_module_state->__pyx_n_s_dict_2); Py_VISIT(traverse_module_state->__pyx_kp_u_disable); @@ -4741,20 +5446,28 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_enumerate); Py_VISIT(traverse_module_state->__pyx_n_s_error); Py_VISIT(traverse_module_state->__pyx_n_s_errors); + Py_VISIT(traverse_module_state->__pyx_n_s_extra_buf); + Py_VISIT(traverse_module_state->__pyx_n_s_extra_links); + Py_VISIT(traverse_module_state->__pyx_n_s_fd); Py_VISIT(traverse_module_state->__pyx_n_s_fid); Py_VISIT(traverse_module_state->__pyx_n_s_fileno); + Py_VISIT(traverse_module_state->__pyx_n_s_find); + Py_VISIT(traverse_module_state->__pyx_n_s_first_pointer); Py_VISIT(traverse_module_state->__pyx_n_s_flags); Py_VISIT(traverse_module_state->__pyx_n_s_float16); Py_VISIT(traverse_module_state->__pyx_n_s_format); Py_VISIT(traverse_module_state->__pyx_n_s_fortran); Py_VISIT(traverse_module_state->__pyx_n_u_fortran); Py_VISIT(traverse_module_state->__pyx_n_s_frombuffer); + Py_VISIT(traverse_module_state->__pyx_n_s_fromstring); Py_VISIT(traverse_module_state->__pyx_kp_u_gc); + Py_VISIT(traverse_module_state->__pyx_n_s_get); Py_VISIT(traverse_module_state->__pyx_n_s_getstate); Py_VISIT(traverse_module_state->__pyx_kp_u_got); Py_VISIT(traverse_module_state->__pyx_kp_u_got_differing_extents_in_dimensi); Py_VISIT(traverse_module_state->__pyx_n_s_i); Py_VISIT(traverse_module_state->__pyx_n_s_id); + Py_VISIT(traverse_module_state->__pyx_n_u_id); Py_VISIT(traverse_module_state->__pyx_n_s_import); Py_VISIT(traverse_module_state->__pyx_n_s_index); Py_VISIT(traverse_module_state->__pyx_n_s_info); @@ -4764,21 +5477,31 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_itemsize); Py_VISIT(traverse_module_state->__pyx_kp_s_itemsize_0_for_cython_array); Py_VISIT(traverse_module_state->__pyx_n_s_keys); + Py_VISIT(traverse_module_state->__pyx_n_u_length); + Py_VISIT(traverse_module_state->__pyx_n_u_link_count); Py_VISIT(traverse_module_state->__pyx_n_u_little); + Py_VISIT(traverse_module_state->__pyx_n_s_lnk); + Py_VISIT(traverse_module_state->__pyx_n_s_lxml); + Py_VISIT(traverse_module_state->__pyx_n_u_m); Py_VISIT(traverse_module_state->__pyx_n_s_main); Py_VISIT(traverse_module_state->__pyx_n_s_max_len); Py_VISIT(traverse_module_state->__pyx_n_s_memview); + Py_VISIT(traverse_module_state->__pyx_n_s_minimal); Py_VISIT(traverse_module_state->__pyx_n_s_mode); Py_VISIT(traverse_module_state->__pyx_n_s_n); Py_VISIT(traverse_module_state->__pyx_n_s_nBytes_aligned); Py_VISIT(traverse_module_state->__pyx_n_s_n_bytes); + Py_VISIT(traverse_module_state->__pyx_n_s_n_extra); Py_VISIT(traverse_module_state->__pyx_n_s_n_records); Py_VISIT(traverse_module_state->__pyx_n_s_name); + Py_VISIT(traverse_module_state->__pyx_n_u_name); Py_VISIT(traverse_module_state->__pyx_n_s_name_2); Py_VISIT(traverse_module_state->__pyx_n_s_ndim); + Py_VISIT(traverse_module_state->__pyx_n_u_needs_completion); Py_VISIT(traverse_module_state->__pyx_n_s_new); Py_VISIT(traverse_module_state->__pyx_kp_s_no_default___reduce___due_to_non); Py_VISIT(traverse_module_state->__pyx_n_s_np); + Py_VISIT(traverse_module_state->__pyx_n_s_nread); Py_VISIT(traverse_module_state->__pyx_n_s_numberOfRecords); Py_VISIT(traverse_module_state->__pyx_n_s_number_of_records); Py_VISIT(traverse_module_state->__pyx_n_s_numpy); @@ -4786,12 +5509,14 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_kp_u_numpy__core_umath_failed_to_impo); Py_VISIT(traverse_module_state->__pyx_n_s_numpy_format); Py_VISIT(traverse_module_state->__pyx_n_s_obj); + Py_VISIT(traverse_module_state->__pyx_n_s_objectify); Py_VISIT(traverse_module_state->__pyx_n_s_offset); Py_VISIT(traverse_module_state->__pyx_n_s_offsets_array); Py_VISIT(traverse_module_state->__pyx_n_s_order); Py_VISIT(traverse_module_state->__pyx_n_s_pack); Py_VISIT(traverse_module_state->__pyx_n_s_pickle); Py_VISIT(traverse_module_state->__pyx_n_s_pointer); + Py_VISIT(traverse_module_state->__pyx_n_u_pointer); Py_VISIT(traverse_module_state->__pyx_n_s_pos); Py_VISIT(traverse_module_state->__pyx_n_s_pos_byte_beg); Py_VISIT(traverse_module_state->__pyx_n_s_pos_byte_end); @@ -4804,8 +5529,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_Enum); Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_SymBufReader); Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable); + Py_VISIT(traverse_module_state->__pyx_n_u_rad); Py_VISIT(traverse_module_state->__pyx_n_s_range); Py_VISIT(traverse_module_state->__pyx_n_s_read); + Py_VISIT(traverse_module_state->__pyx_n_s_read_cn_chain_fast); Py_VISIT(traverse_module_state->__pyx_n_s_rec); Py_VISIT(traverse_module_state->__pyx_n_s_record); Py_VISIT(traverse_module_state->__pyx_n_u_record); @@ -4822,8 +5549,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex); Py_VISIT(traverse_module_state->__pyx_n_s_register); Py_VISIT(traverse_module_state->__pyx_n_u_replace); + Py_VISIT(traverse_module_state->__pyx_n_s_results); Py_VISIT(traverse_module_state->__pyx_n_s_rjust); Py_VISIT(traverse_module_state->__pyx_n_s_rstrip); + Py_VISIT(traverse_module_state->__pyx_n_u_s); Py_VISIT(traverse_module_state->__pyx_n_s_sd_block); Py_VISIT(traverse_module_state->__pyx_n_s_sd_block_length); Py_VISIT(traverse_module_state->__pyx_n_s_sd_data_read); @@ -4832,10 +5561,21 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_setstate); Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython); Py_VISIT(traverse_module_state->__pyx_n_s_shape); + Py_VISIT(traverse_module_state->__pyx_n_u_si_bus_type); + Py_VISIT(traverse_module_state->__pyx_n_s_si_cache); + Py_VISIT(traverse_module_state->__pyx_n_s_si_dict); + Py_VISIT(traverse_module_state->__pyx_n_u_si_flags); + Py_VISIT(traverse_module_state->__pyx_n_u_si_md_comment); + Py_VISIT(traverse_module_state->__pyx_n_s_si_ptr); + Py_VISIT(traverse_module_state->__pyx_n_u_si_tx_name); + Py_VISIT(traverse_module_state->__pyx_n_u_si_tx_path); + Py_VISIT(traverse_module_state->__pyx_n_u_si_type); Py_VISIT(traverse_module_state->__pyx_n_s_signal_data_type); Py_VISIT(traverse_module_state->__pyx_n_s_size); Py_VISIT(traverse_module_state->__pyx_n_s_sizes_array); Py_VISIT(traverse_module_state->__pyx_n_s_sorted_data_read); + Py_VISIT(traverse_module_state->__pyx_n_u_source_name); + Py_VISIT(traverse_module_state->__pyx_n_u_source_path); Py_VISIT(traverse_module_state->__pyx_n_s_spec); Py_VISIT(traverse_module_state->__pyx_n_s_start); Py_VISIT(traverse_module_state->__pyx_n_s_state); @@ -4854,6 +5594,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_n_s_uint16); Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_array_data); Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str); + Py_VISIT(traverse_module_state->__pyx_n_u_unit); + Py_VISIT(traverse_module_state->__pyx_n_s_unit_str); Py_VISIT(traverse_module_state->__pyx_n_s_unpack); Py_VISIT(traverse_module_state->__pyx_n_s_unsorted_data_read4); Py_VISIT(traverse_module_state->__pyx_n_s_update); @@ -4875,6 +5617,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_int_1); Py_VISIT(traverse_module_state->__pyx_int_2); Py_VISIT(traverse_module_state->__pyx_int_3); + Py_VISIT(traverse_module_state->__pyx_int_4); + Py_VISIT(traverse_module_state->__pyx_int_5); Py_VISIT(traverse_module_state->__pyx_int_6); Py_VISIT(traverse_module_state->__pyx_int_7); Py_VISIT(traverse_module_state->__pyx_int_8); @@ -4924,6 +5668,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_tuple__44); Py_VISIT(traverse_module_state->__pyx_tuple__46); Py_VISIT(traverse_module_state->__pyx_tuple__48); + Py_VISIT(traverse_module_state->__pyx_tuple__50); Py_VISIT(traverse_module_state->__pyx_codeobj__29); Py_VISIT(traverse_module_state->__pyx_codeobj__31); Py_VISIT(traverse_module_state->__pyx_codeobj__34); @@ -4935,7 +5680,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { Py_VISIT(traverse_module_state->__pyx_codeobj__45); Py_VISIT(traverse_module_state->__pyx_codeobj__47); Py_VISIT(traverse_module_state->__pyx_codeobj__49); - Py_VISIT(traverse_module_state->__pyx_codeobj__50); + Py_VISIT(traverse_module_state->__pyx_codeobj__51); + Py_VISIT(traverse_module_state->__pyx_codeobj__52); return 0; } #endif @@ -5011,6 +5757,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #if CYTHON_USE_MODULE_STATE #endif #if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE +#endif +#if CYTHON_USE_MODULE_STATE #define __pyx_type_8dataRead_SymBufReader __pyx_mstate_global->__pyx_type_8dataRead_SymBufReader #define __pyx_type___pyx_array __pyx_mstate_global->__pyx_type___pyx_array #define __pyx_type___pyx_MemviewEnum __pyx_mstate_global->__pyx_type___pyx_MemviewEnum @@ -5026,21 +5776,33 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_ASCII __pyx_mstate_global->__pyx_n_s_ASCII #define __pyx_kp_s_All_dimensions_preceding_dimensi __pyx_mstate_global->__pyx_kp_s_All_dimensions_preceding_dimensi #define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError +#define __pyx_n_s_AttributeError __pyx_mstate_global->__pyx_n_s_AttributeError +#define __pyx_n_u_BUS __pyx_mstate_global->__pyx_n_u_BUS #define __pyx_kp_s_Buffer_view_does_not_expose_stri __pyx_mstate_global->__pyx_kp_s_Buffer_view_does_not_expose_stri #define __pyx_n_u_C __pyx_mstate_global->__pyx_n_u_C +#define __pyx_n_u_CAN __pyx_mstate_global->__pyx_n_u_CAN +#define __pyx_kp_b_CC __pyx_mstate_global->__pyx_kp_b_CC #define __pyx_n_s_CGrecordLength __pyx_mstate_global->__pyx_n_s_CGrecordLength +#define __pyx_kp_b_CN __pyx_mstate_global->__pyx_kp_b_CN +#define __pyx_n_s_CNcomment __pyx_mstate_global->__pyx_n_s_CNcomment +#define __pyx_n_s_CNunit __pyx_mstate_global->__pyx_n_s_CNunit #define __pyx_kp_s_Can_only_create_a_buffer_that_is __pyx_mstate_global->__pyx_kp_s_Can_only_create_a_buffer_that_is #define __pyx_kp_s_Cannot_assign_to_read_only_memor __pyx_mstate_global->__pyx_kp_s_Cannot_assign_to_read_only_memor #define __pyx_kp_s_Cannot_create_writable_memory_vi __pyx_mstate_global->__pyx_kp_s_Cannot_create_writable_memory_vi #define __pyx_kp_u_Cannot_index_with_type __pyx_mstate_global->__pyx_kp_u_Cannot_index_with_type #define __pyx_kp_s_Cannot_transpose_memoryview_with __pyx_mstate_global->__pyx_kp_s_Cannot_transpose_memoryview_with #define __pyx_n_s_Channel __pyx_mstate_global->__pyx_n_s_Channel +#define __pyx_n_u_Comment __pyx_mstate_global->__pyx_n_u_Comment #define __pyx_kp_s_Dimension_d_is_not_direct __pyx_mstate_global->__pyx_kp_s_Dimension_d_is_not_direct +#define __pyx_n_u_ECU __pyx_mstate_global->__pyx_n_u_ECU +#define __pyx_n_u_ETHERNET __pyx_mstate_global->__pyx_n_u_ETHERNET #define __pyx_n_s_Ellipsis __pyx_mstate_global->__pyx_n_s_Ellipsis #define __pyx_kp_s_Empty_shape_tuple_for_cython_arr __pyx_mstate_global->__pyx_kp_s_Empty_shape_tuple_for_cython_arr +#define __pyx_n_u_FLEXRAY __pyx_mstate_global->__pyx_n_u_FLEXRAY #define __pyx_n_s_Flags __pyx_mstate_global->__pyx_n_s_Flags #define __pyx_n_u_ISO8859 __pyx_mstate_global->__pyx_n_u_ISO8859 #define __pyx_kp_u_ISO_8859_1 __pyx_mstate_global->__pyx_kp_u_ISO_8859_1 +#define __pyx_kp_u_I_O __pyx_mstate_global->__pyx_kp_u_I_O #define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError #define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0 #define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2 @@ -5049,14 +5811,23 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_kp_s_Indirect_dimensions_not_supporte __pyx_mstate_global->__pyx_kp_s_Indirect_dimensions_not_supporte #define __pyx_kp_u_Invalid_mode_expected_c_or_fortr __pyx_mstate_global->__pyx_kp_u_Invalid_mode_expected_c_or_fortr #define __pyx_kp_u_Invalid_shape_in_axis __pyx_mstate_global->__pyx_kp_u_Invalid_shape_in_axis +#define __pyx_n_u_K_LINE __pyx_mstate_global->__pyx_n_u_K_LINE +#define __pyx_n_u_LIN __pyx_mstate_global->__pyx_n_u_LIN +#define __pyx_n_u_MOST __pyx_mstate_global->__pyx_n_u_MOST #define __pyx_n_s_MemoryError __pyx_mstate_global->__pyx_n_s_MemoryError #define __pyx_kp_s_MemoryView_of_r_at_0x_x __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_at_0x_x #define __pyx_kp_s_MemoryView_of_r_object __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_object +#define __pyx_n_u_NONE __pyx_mstate_global->__pyx_n_u_NONE #define __pyx_n_b_O __pyx_mstate_global->__pyx_n_b_O +#define __pyx_n_u_OTHER __pyx_mstate_global->__pyx_n_u_OTHER #define __pyx_kp_u_Out_of_bounds_on_buffer_access_a __pyx_mstate_global->__pyx_kp_u_Out_of_bounds_on_buffer_access_a #define __pyx_n_s_OverflowError __pyx_mstate_global->__pyx_n_s_OverflowError #define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError #define __pyx_n_u_S __pyx_mstate_global->__pyx_n_u_S +#define __pyx_kp_b_SI __pyx_mstate_global->__pyx_kp_b_SI +#define __pyx_n_u_SI_2 __pyx_mstate_global->__pyx_n_u_SI_2 +#define __pyx_n_s_SI_BUS_MAP __pyx_mstate_global->__pyx_n_s_SI_BUS_MAP +#define __pyx_n_s_SI_TYPE_MAP __pyx_mstate_global->__pyx_n_s_SI_TYPE_MAP #define __pyx_n_s_Sequence __pyx_mstate_global->__pyx_n_s_Sequence #define __pyx_kp_s_Step_may_not_be_zero_axis_d __pyx_mstate_global->__pyx_kp_s_Step_may_not_be_zero_axis_d #define __pyx_n_s_SymBufReader __pyx_mstate_global->__pyx_n_s_SymBufReader @@ -5066,8 +5837,14 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_SymBufReader_read __pyx_mstate_global->__pyx_n_s_SymBufReader_read #define __pyx_n_s_SymBufReader_seek __pyx_mstate_global->__pyx_n_s_SymBufReader_seek #define __pyx_n_s_SymBufReader_tell __pyx_mstate_global->__pyx_n_s_SymBufReader_tell +#define __pyx_n_u_TOOL __pyx_mstate_global->__pyx_n_u_TOOL +#define __pyx_kp_b_TX __pyx_mstate_global->__pyx_kp_b_TX +#define __pyx_kp_b_TX_2 __pyx_mstate_global->__pyx_kp_b_TX_2 +#define __pyx_n_s_TX_3 __pyx_mstate_global->__pyx_n_s_TX_3 #define __pyx_n_s_TypeError __pyx_mstate_global->__pyx_n_s_TypeError #define __pyx_kp_u_U __pyx_mstate_global->__pyx_kp_u_U +#define __pyx_n_u_USB __pyx_mstate_global->__pyx_n_u_USB +#define __pyx_n_u_USER __pyx_mstate_global->__pyx_n_u_USER #define __pyx_kp_s_Unable_to_convert_item_to_object __pyx_mstate_global->__pyx_kp_s_Unable_to_convert_item_to_object #define __pyx_n_u_V __pyx_mstate_global->__pyx_n_u_V #define __pyx_n_s_VLSD __pyx_mstate_global->__pyx_n_s_VLSD @@ -5080,11 +5857,12 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError #define __pyx_n_s_View_MemoryView __pyx_mstate_global->__pyx_n_s_View_MemoryView #define __pyx_kp_b__12 __pyx_mstate_global->__pyx_kp_b__12 +#define __pyx_kp_u__12 __pyx_mstate_global->__pyx_kp_u__12 #define __pyx_kp_b__13 __pyx_mstate_global->__pyx_kp_b__13 #define __pyx_kp_u__13 __pyx_mstate_global->__pyx_kp_u__13 #define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2 #define __pyx_n_s__3 __pyx_mstate_global->__pyx_n_s__3 -#define __pyx_n_s__51 __pyx_mstate_global->__pyx_n_s__51 +#define __pyx_n_s__53 __pyx_mstate_global->__pyx_n_s__53 #define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6 #define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7 #define __pyx_n_s_abc __pyx_mstate_global->__pyx_n_s_abc @@ -5110,15 +5888,65 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_c __pyx_mstate_global->__pyx_n_s_c #define __pyx_n_u_c __pyx_mstate_global->__pyx_n_u_c #define __pyx_n_s_c_format_structure __pyx_mstate_global->__pyx_n_s_c_format_structure +#define __pyx_n_u_cc_cc_inverse __pyx_mstate_global->__pyx_n_u_cc_cc_inverse +#define __pyx_n_s_cc_dat __pyx_mstate_global->__pyx_n_s_cc_dat +#define __pyx_n_s_cc_data_offset __pyx_mstate_global->__pyx_n_s_cc_data_offset +#define __pyx_n_s_cc_dict __pyx_mstate_global->__pyx_n_s_cc_dict +#define __pyx_n_u_cc_flags __pyx_mstate_global->__pyx_n_u_cc_flags +#define __pyx_n_s_cc_hdr __pyx_mstate_global->__pyx_n_s_cc_hdr +#define __pyx_n_u_cc_md_comment __pyx_mstate_global->__pyx_n_u_cc_md_comment +#define __pyx_n_u_cc_md_unit __pyx_mstate_global->__pyx_n_u_cc_md_unit +#define __pyx_n_u_cc_phy_range_max __pyx_mstate_global->__pyx_n_u_cc_phy_range_max +#define __pyx_n_u_cc_phy_range_min __pyx_mstate_global->__pyx_n_u_cc_phy_range_min +#define __pyx_n_u_cc_precision __pyx_mstate_global->__pyx_n_u_cc_precision +#define __pyx_n_s_cc_ptr __pyx_mstate_global->__pyx_n_s_cc_ptr +#define __pyx_n_u_cc_ref_count __pyx_mstate_global->__pyx_n_u_cc_ref_count +#define __pyx_n_u_cc_tx_name __pyx_mstate_global->__pyx_n_u_cc_tx_name +#define __pyx_n_u_cc_type __pyx_mstate_global->__pyx_n_u_cc_type +#define __pyx_n_u_cc_val __pyx_mstate_global->__pyx_n_u_cc_val +#define __pyx_n_s_cc_val_buf __pyx_mstate_global->__pyx_n_s_cc_val_buf +#define __pyx_n_u_cc_val_count __pyx_mstate_global->__pyx_n_u_cc_val_count +#define __pyx_n_s_cc_val_list __pyx_mstate_global->__pyx_n_s_cc_val_list #define __pyx_n_u_channel __pyx_mstate_global->__pyx_n_u_channel #define __pyx_n_u_channelName __pyx_mstate_global->__pyx_n_u_channelName #define __pyx_n_s_channelNames __pyx_mstate_global->__pyx_n_s_channelNames #define __pyx_n_s_channel_format __pyx_mstate_global->__pyx_n_s_channel_format #define __pyx_n_s_channel_name __pyx_mstate_global->__pyx_n_s_channel_name +#define __pyx_n_s_channel_name_list __pyx_mstate_global->__pyx_n_s_channel_name_list #define __pyx_n_s_channel_name_set __pyx_mstate_global->__pyx_n_s_channel_name_set #define __pyx_n_s_class __pyx_mstate_global->__pyx_n_s_class #define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem #define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback +#define __pyx_n_u_cn_at_reference __pyx_mstate_global->__pyx_n_u_cn_at_reference +#define __pyx_n_u_cn_attachment_count __pyx_mstate_global->__pyx_n_u_cn_attachment_count +#define __pyx_n_u_cn_bit_count __pyx_mstate_global->__pyx_n_u_cn_bit_count +#define __pyx_n_u_cn_bit_offset __pyx_mstate_global->__pyx_n_u_cn_bit_offset +#define __pyx_n_u_cn_byte_offset __pyx_mstate_global->__pyx_n_u_cn_byte_offset +#define __pyx_n_u_cn_cc_conversion __pyx_mstate_global->__pyx_n_u_cn_cc_conversion +#define __pyx_n_u_cn_cn_next __pyx_mstate_global->__pyx_n_u_cn_cn_next +#define __pyx_n_u_cn_composition __pyx_mstate_global->__pyx_n_u_cn_composition +#define __pyx_n_s_cn_dat __pyx_mstate_global->__pyx_n_s_cn_dat +#define __pyx_n_u_cn_data __pyx_mstate_global->__pyx_n_u_cn_data +#define __pyx_n_u_cn_data_type __pyx_mstate_global->__pyx_n_u_cn_data_type +#define __pyx_n_u_cn_default_x __pyx_mstate_global->__pyx_n_u_cn_default_x +#define __pyx_n_s_cn_dict __pyx_mstate_global->__pyx_n_s_cn_dict +#define __pyx_n_u_cn_flags __pyx_mstate_global->__pyx_n_u_cn_flags +#define __pyx_n_s_cn_hdr __pyx_mstate_global->__pyx_n_s_cn_hdr +#define __pyx_n_u_cn_invalid_bit_pos __pyx_mstate_global->__pyx_n_u_cn_invalid_bit_pos +#define __pyx_n_s_cn_key __pyx_mstate_global->__pyx_n_s_cn_key +#define __pyx_n_s_cn_key_neg __pyx_mstate_global->__pyx_n_s_cn_key_neg +#define __pyx_n_s_cn_key_uint __pyx_mstate_global->__pyx_n_s_cn_key_uint +#define __pyx_n_u_cn_md_comment __pyx_mstate_global->__pyx_n_u_cn_md_comment +#define __pyx_n_u_cn_md_unit __pyx_mstate_global->__pyx_n_u_cn_md_unit +#define __pyx_n_s_cn_name __pyx_mstate_global->__pyx_n_s_cn_name +#define __pyx_n_u_cn_precision __pyx_mstate_global->__pyx_n_u_cn_precision +#define __pyx_n_u_cn_reserved __pyx_mstate_global->__pyx_n_u_cn_reserved +#define __pyx_n_u_cn_si_source __pyx_mstate_global->__pyx_n_u_cn_si_source +#define __pyx_n_u_cn_sync_type __pyx_mstate_global->__pyx_n_u_cn_sync_type +#define __pyx_n_u_cn_tx_name __pyx_mstate_global->__pyx_n_u_cn_tx_name +#define __pyx_n_u_cn_type __pyx_mstate_global->__pyx_n_u_cn_type +#define __pyx_n_u_cn_val_range_max __pyx_mstate_global->__pyx_n_u_cn_val_range_max +#define __pyx_n_u_cn_val_range_min __pyx_mstate_global->__pyx_n_u_cn_val_range_min #define __pyx_n_s_collections __pyx_mstate_global->__pyx_n_s_collections #define __pyx_kp_s_collections_abc __pyx_mstate_global->__pyx_kp_s_collections_abc #define __pyx_kp_s_contiguous_and_direct __pyx_mstate_global->__pyx_kp_s_contiguous_and_direct @@ -5129,7 +5957,11 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_kp_s_dataRead_pyx __pyx_mstate_global->__pyx_kp_s_dataRead_pyx #define __pyx_n_s_data_block_length __pyx_mstate_global->__pyx_n_s_data_block_length #define __pyx_n_s_data_format __pyx_mstate_global->__pyx_n_s_data_format +#define __pyx_n_s_data_offset __pyx_mstate_global->__pyx_n_s_data_offset +#define __pyx_n_s_dbl_ptr __pyx_mstate_global->__pyx_n_s_dbl_ptr #define __pyx_n_s_decode __pyx_mstate_global->__pyx_n_s_decode +#define __pyx_n_s_desc_str __pyx_mstate_global->__pyx_n_s_desc_str +#define __pyx_n_u_description __pyx_mstate_global->__pyx_n_u_description #define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict #define __pyx_n_s_dict_2 __pyx_mstate_global->__pyx_n_s_dict_2 #define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable @@ -5142,20 +5974,28 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_enumerate __pyx_mstate_global->__pyx_n_s_enumerate #define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error #define __pyx_n_s_errors __pyx_mstate_global->__pyx_n_s_errors +#define __pyx_n_s_extra_buf __pyx_mstate_global->__pyx_n_s_extra_buf +#define __pyx_n_s_extra_links __pyx_mstate_global->__pyx_n_s_extra_links +#define __pyx_n_s_fd __pyx_mstate_global->__pyx_n_s_fd #define __pyx_n_s_fid __pyx_mstate_global->__pyx_n_s_fid #define __pyx_n_s_fileno __pyx_mstate_global->__pyx_n_s_fileno +#define __pyx_n_s_find __pyx_mstate_global->__pyx_n_s_find +#define __pyx_n_s_first_pointer __pyx_mstate_global->__pyx_n_s_first_pointer #define __pyx_n_s_flags __pyx_mstate_global->__pyx_n_s_flags #define __pyx_n_s_float16 __pyx_mstate_global->__pyx_n_s_float16 #define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format #define __pyx_n_s_fortran __pyx_mstate_global->__pyx_n_s_fortran #define __pyx_n_u_fortran __pyx_mstate_global->__pyx_n_u_fortran #define __pyx_n_s_frombuffer __pyx_mstate_global->__pyx_n_s_frombuffer +#define __pyx_n_s_fromstring __pyx_mstate_global->__pyx_n_s_fromstring #define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc +#define __pyx_n_s_get __pyx_mstate_global->__pyx_n_s_get #define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate #define __pyx_kp_u_got __pyx_mstate_global->__pyx_kp_u_got #define __pyx_kp_u_got_differing_extents_in_dimensi __pyx_mstate_global->__pyx_kp_u_got_differing_extents_in_dimensi #define __pyx_n_s_i __pyx_mstate_global->__pyx_n_s_i #define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id +#define __pyx_n_u_id __pyx_mstate_global->__pyx_n_u_id #define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import #define __pyx_n_s_index __pyx_mstate_global->__pyx_n_s_index #define __pyx_n_s_info __pyx_mstate_global->__pyx_n_s_info @@ -5165,21 +6005,31 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_itemsize __pyx_mstate_global->__pyx_n_s_itemsize #define __pyx_kp_s_itemsize_0_for_cython_array __pyx_mstate_global->__pyx_kp_s_itemsize_0_for_cython_array #define __pyx_n_s_keys __pyx_mstate_global->__pyx_n_s_keys +#define __pyx_n_u_length __pyx_mstate_global->__pyx_n_u_length +#define __pyx_n_u_link_count __pyx_mstate_global->__pyx_n_u_link_count #define __pyx_n_u_little __pyx_mstate_global->__pyx_n_u_little +#define __pyx_n_s_lnk __pyx_mstate_global->__pyx_n_s_lnk +#define __pyx_n_s_lxml __pyx_mstate_global->__pyx_n_s_lxml +#define __pyx_n_u_m __pyx_mstate_global->__pyx_n_u_m #define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main #define __pyx_n_s_max_len __pyx_mstate_global->__pyx_n_s_max_len #define __pyx_n_s_memview __pyx_mstate_global->__pyx_n_s_memview +#define __pyx_n_s_minimal __pyx_mstate_global->__pyx_n_s_minimal #define __pyx_n_s_mode __pyx_mstate_global->__pyx_n_s_mode #define __pyx_n_s_n __pyx_mstate_global->__pyx_n_s_n #define __pyx_n_s_nBytes_aligned __pyx_mstate_global->__pyx_n_s_nBytes_aligned #define __pyx_n_s_n_bytes __pyx_mstate_global->__pyx_n_s_n_bytes +#define __pyx_n_s_n_extra __pyx_mstate_global->__pyx_n_s_n_extra #define __pyx_n_s_n_records __pyx_mstate_global->__pyx_n_s_n_records #define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name +#define __pyx_n_u_name __pyx_mstate_global->__pyx_n_u_name #define __pyx_n_s_name_2 __pyx_mstate_global->__pyx_n_s_name_2 #define __pyx_n_s_ndim __pyx_mstate_global->__pyx_n_s_ndim +#define __pyx_n_u_needs_completion __pyx_mstate_global->__pyx_n_u_needs_completion #define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new #define __pyx_kp_s_no_default___reduce___due_to_non __pyx_mstate_global->__pyx_kp_s_no_default___reduce___due_to_non #define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np +#define __pyx_n_s_nread __pyx_mstate_global->__pyx_n_s_nread #define __pyx_n_s_numberOfRecords __pyx_mstate_global->__pyx_n_s_numberOfRecords #define __pyx_n_s_number_of_records __pyx_mstate_global->__pyx_n_s_number_of_records #define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy @@ -5187,12 +6037,14 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_kp_u_numpy__core_umath_failed_to_impo __pyx_mstate_global->__pyx_kp_u_numpy__core_umath_failed_to_impo #define __pyx_n_s_numpy_format __pyx_mstate_global->__pyx_n_s_numpy_format #define __pyx_n_s_obj __pyx_mstate_global->__pyx_n_s_obj +#define __pyx_n_s_objectify __pyx_mstate_global->__pyx_n_s_objectify #define __pyx_n_s_offset __pyx_mstate_global->__pyx_n_s_offset #define __pyx_n_s_offsets_array __pyx_mstate_global->__pyx_n_s_offsets_array #define __pyx_n_s_order __pyx_mstate_global->__pyx_n_s_order #define __pyx_n_s_pack __pyx_mstate_global->__pyx_n_s_pack #define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle #define __pyx_n_s_pointer __pyx_mstate_global->__pyx_n_s_pointer +#define __pyx_n_u_pointer __pyx_mstate_global->__pyx_n_u_pointer #define __pyx_n_s_pos __pyx_mstate_global->__pyx_n_s_pos #define __pyx_n_s_pos_byte_beg __pyx_mstate_global->__pyx_n_s_pos_byte_beg #define __pyx_n_s_pos_byte_end __pyx_mstate_global->__pyx_n_s_pos_byte_end @@ -5205,8 +6057,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_pyx_unpickle_Enum __pyx_mstate_global->__pyx_n_s_pyx_unpickle_Enum #define __pyx_n_s_pyx_unpickle_SymBufReader __pyx_mstate_global->__pyx_n_s_pyx_unpickle_SymBufReader #define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable +#define __pyx_n_u_rad __pyx_mstate_global->__pyx_n_u_rad #define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range #define __pyx_n_s_read __pyx_mstate_global->__pyx_n_s_read +#define __pyx_n_s_read_cn_chain_fast __pyx_mstate_global->__pyx_n_s_read_cn_chain_fast #define __pyx_n_s_rec __pyx_mstate_global->__pyx_n_s_rec #define __pyx_n_s_record __pyx_mstate_global->__pyx_n_s_record #define __pyx_n_u_record __pyx_mstate_global->__pyx_n_u_record @@ -5223,8 +6077,10 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex #define __pyx_n_s_register __pyx_mstate_global->__pyx_n_s_register #define __pyx_n_u_replace __pyx_mstate_global->__pyx_n_u_replace +#define __pyx_n_s_results __pyx_mstate_global->__pyx_n_s_results #define __pyx_n_s_rjust __pyx_mstate_global->__pyx_n_s_rjust #define __pyx_n_s_rstrip __pyx_mstate_global->__pyx_n_s_rstrip +#define __pyx_n_u_s __pyx_mstate_global->__pyx_n_u_s #define __pyx_n_s_sd_block __pyx_mstate_global->__pyx_n_s_sd_block #define __pyx_n_s_sd_block_length __pyx_mstate_global->__pyx_n_s_sd_block_length #define __pyx_n_s_sd_data_read __pyx_mstate_global->__pyx_n_s_sd_data_read @@ -5233,10 +6089,21 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate #define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython #define __pyx_n_s_shape __pyx_mstate_global->__pyx_n_s_shape +#define __pyx_n_u_si_bus_type __pyx_mstate_global->__pyx_n_u_si_bus_type +#define __pyx_n_s_si_cache __pyx_mstate_global->__pyx_n_s_si_cache +#define __pyx_n_s_si_dict __pyx_mstate_global->__pyx_n_s_si_dict +#define __pyx_n_u_si_flags __pyx_mstate_global->__pyx_n_u_si_flags +#define __pyx_n_u_si_md_comment __pyx_mstate_global->__pyx_n_u_si_md_comment +#define __pyx_n_s_si_ptr __pyx_mstate_global->__pyx_n_s_si_ptr +#define __pyx_n_u_si_tx_name __pyx_mstate_global->__pyx_n_u_si_tx_name +#define __pyx_n_u_si_tx_path __pyx_mstate_global->__pyx_n_u_si_tx_path +#define __pyx_n_u_si_type __pyx_mstate_global->__pyx_n_u_si_type #define __pyx_n_s_signal_data_type __pyx_mstate_global->__pyx_n_s_signal_data_type #define __pyx_n_s_size __pyx_mstate_global->__pyx_n_s_size #define __pyx_n_s_sizes_array __pyx_mstate_global->__pyx_n_s_sizes_array #define __pyx_n_s_sorted_data_read __pyx_mstate_global->__pyx_n_s_sorted_data_read +#define __pyx_n_u_source_name __pyx_mstate_global->__pyx_n_u_source_name +#define __pyx_n_u_source_path __pyx_mstate_global->__pyx_n_u_source_path #define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec #define __pyx_n_s_start __pyx_mstate_global->__pyx_n_s_start #define __pyx_n_s_state __pyx_mstate_global->__pyx_n_s_state @@ -5255,6 +6122,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_n_s_uint16 __pyx_mstate_global->__pyx_n_s_uint16 #define __pyx_kp_s_unable_to_allocate_array_data __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_array_data #define __pyx_kp_s_unable_to_allocate_shape_and_str __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_shape_and_str +#define __pyx_n_u_unit __pyx_mstate_global->__pyx_n_u_unit +#define __pyx_n_s_unit_str __pyx_mstate_global->__pyx_n_s_unit_str #define __pyx_n_s_unpack __pyx_mstate_global->__pyx_n_s_unpack #define __pyx_n_s_unsorted_data_read4 __pyx_mstate_global->__pyx_n_s_unsorted_data_read4 #define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update @@ -5276,6 +6145,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_int_1 __pyx_mstate_global->__pyx_int_1 #define __pyx_int_2 __pyx_mstate_global->__pyx_int_2 #define __pyx_int_3 __pyx_mstate_global->__pyx_int_3 +#define __pyx_int_4 __pyx_mstate_global->__pyx_int_4 +#define __pyx_int_5 __pyx_mstate_global->__pyx_int_5 #define __pyx_int_6 __pyx_mstate_global->__pyx_int_6 #define __pyx_int_7 __pyx_mstate_global->__pyx_int_7 #define __pyx_int_8 __pyx_mstate_global->__pyx_int_8 @@ -5325,6 +6196,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_tuple__44 __pyx_mstate_global->__pyx_tuple__44 #define __pyx_tuple__46 __pyx_mstate_global->__pyx_tuple__46 #define __pyx_tuple__48 __pyx_mstate_global->__pyx_tuple__48 +#define __pyx_tuple__50 __pyx_mstate_global->__pyx_tuple__50 #define __pyx_codeobj__29 __pyx_mstate_global->__pyx_codeobj__29 #define __pyx_codeobj__31 __pyx_mstate_global->__pyx_codeobj__31 #define __pyx_codeobj__34 __pyx_mstate_global->__pyx_codeobj__34 @@ -5336,7 +6208,8 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) { #define __pyx_codeobj__45 __pyx_mstate_global->__pyx_codeobj__45 #define __pyx_codeobj__47 __pyx_mstate_global->__pyx_codeobj__47 #define __pyx_codeobj__49 __pyx_mstate_global->__pyx_codeobj__49 -#define __pyx_codeobj__50 __pyx_mstate_global->__pyx_codeobj__50 +#define __pyx_codeobj__51 __pyx_mstate_global->__pyx_codeobj__51 +#define __pyx_codeobj__52 __pyx_mstate_global->__pyx_codeobj__52 /* #### Code section: module_code ### */ /* "carray.from_py":79 @@ -20996,7 +21869,7 @@ static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObjec return __pyx_r; } -/* "dataRead.pyx":37 +/* "dataRead.pyx":38 * cdef Py_ssize_t _pos # logical file position (cursor) * * def __init__(self, fid): # <<<<<<<<<<<<<< @@ -21040,12 +21913,12 @@ static int __pyx_pw_8dataRead_12SymBufReader_1__init__(PyObject *__pyx_v_self, P (void)__Pyx_Arg_NewRef_VARARGS(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 38, __pyx_L3_error) else goto __pyx_L5_argtuple_error; } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 37, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 38, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 1)) { goto __pyx_L5_argtuple_error; @@ -21056,7 +21929,7 @@ static int __pyx_pw_8dataRead_12SymBufReader_1__init__(PyObject *__pyx_v_self, P } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 37, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 38, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -21088,7 +21961,7 @@ static int __pyx_pf_8dataRead_12SymBufReader___init__(struct __pyx_obj_8dataRead __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("__init__", 1); - /* "dataRead.pyx":38 + /* "dataRead.pyx":39 * * def __init__(self, fid): * self._fid = fid # <<<<<<<<<<<<<< @@ -21101,7 +21974,7 @@ static int __pyx_pf_8dataRead_12SymBufReader___init__(struct __pyx_obj_8dataRead __Pyx_DECREF(__pyx_v_self->_fid); __pyx_v_self->_fid = __pyx_v_fid; - /* "dataRead.pyx":39 + /* "dataRead.pyx":40 * def __init__(self, fid): * self._fid = fid * self._buf_start = 0 # <<<<<<<<<<<<<< @@ -21110,7 +21983,7 @@ static int __pyx_pf_8dataRead_12SymBufReader___init__(struct __pyx_obj_8dataRead */ __pyx_v_self->_buf_start = 0; - /* "dataRead.pyx":40 + /* "dataRead.pyx":41 * self._fid = fid * self._buf_start = 0 * self._buf_len = 0 # <<<<<<<<<<<<<< @@ -21119,7 +21992,7 @@ static int __pyx_pf_8dataRead_12SymBufReader___init__(struct __pyx_obj_8dataRead */ __pyx_v_self->_buf_len = 0; - /* "dataRead.pyx":41 + /* "dataRead.pyx":42 * self._buf_start = 0 * self._buf_len = 0 * self._pos = 0 # <<<<<<<<<<<<<< @@ -21128,7 +22001,7 @@ static int __pyx_pf_8dataRead_12SymBufReader___init__(struct __pyx_obj_8dataRead */ __pyx_v_self->_pos = 0; - /* "dataRead.pyx":37 + /* "dataRead.pyx":38 * cdef Py_ssize_t _pos # logical file position (cursor) * * def __init__(self, fid): # <<<<<<<<<<<<<< @@ -21142,7 +22015,7 @@ static int __pyx_pf_8dataRead_12SymBufReader___init__(struct __pyx_obj_8dataRead return __pyx_r; } -/* "dataRead.pyx":43 +/* "dataRead.pyx":44 * self._pos = 0 * * cdef int _fill(self, Py_ssize_t pos) except -1: # <<<<<<<<<<<<<< @@ -21169,7 +22042,7 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_fill", 1); - /* "dataRead.pyx":45 + /* "dataRead.pyx":46 * cdef int _fill(self, Py_ssize_t pos) except -1: * """Refill _buf centred on pos, reading from the underlying file.""" * cdef Py_ssize_t start = pos - (SYM_BUF_SIZE >> 1) # <<<<<<<<<<<<<< @@ -21178,7 +22051,7 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym */ __pyx_v_start = (__pyx_v_pos - 0x8000); - /* "dataRead.pyx":48 + /* "dataRead.pyx":49 * cdef bytes raw * cdef Py_ssize_t n * if start < 0: # <<<<<<<<<<<<<< @@ -21188,7 +22061,7 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym __pyx_t_1 = (__pyx_v_start < 0); if (__pyx_t_1) { - /* "dataRead.pyx":49 + /* "dataRead.pyx":50 * cdef Py_ssize_t n * if start < 0: * start = 0 # <<<<<<<<<<<<<< @@ -21197,7 +22070,7 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym */ __pyx_v_start = 0; - /* "dataRead.pyx":48 + /* "dataRead.pyx":49 * cdef bytes raw * cdef Py_ssize_t n * if start < 0: # <<<<<<<<<<<<<< @@ -21206,16 +22079,16 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym */ } - /* "dataRead.pyx":50 + /* "dataRead.pyx":51 * if start < 0: * start = 0 * self._fid.seek(start) # <<<<<<<<<<<<<< * raw = self._fid.read(SYM_BUF_SIZE) * n = len(raw) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_seek); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_seek); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 50, __pyx_L1_error) + __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; __pyx_t_6 = 0; @@ -21236,20 +22109,20 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 50, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":51 + /* "dataRead.pyx":52 * start = 0 * self._fid.seek(start) * raw = self._fid.read(SYM_BUF_SIZE) # <<<<<<<<<<<<<< * n = len(raw) * memcpy(self._buf, raw, n) */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; __pyx_t_6 = 0; @@ -21269,15 +22142,15 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_int_65536}; __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(0, 51, __pyx_L1_error) + if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(0, 52, __pyx_L1_error) __pyx_v_raw = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":52 + /* "dataRead.pyx":53 * self._fid.seek(start) * raw = self._fid.read(SYM_BUF_SIZE) * n = len(raw) # <<<<<<<<<<<<<< @@ -21286,12 +22159,12 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym */ if (unlikely(__pyx_v_raw == Py_None)) { PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 52, __pyx_L1_error) + __PYX_ERR(0, 53, __pyx_L1_error) } - __pyx_t_7 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 52, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 53, __pyx_L1_error) __pyx_v_n = __pyx_t_7; - /* "dataRead.pyx":53 + /* "dataRead.pyx":54 * raw = self._fid.read(SYM_BUF_SIZE) * n = len(raw) * memcpy(self._buf, raw, n) # <<<<<<<<<<<<<< @@ -21300,12 +22173,12 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym */ if (unlikely(__pyx_v_raw == Py_None)) { PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found"); - __PYX_ERR(0, 53, __pyx_L1_error) + __PYX_ERR(0, 54, __pyx_L1_error) } - __pyx_t_8 = __Pyx_PyBytes_AsUString(__pyx_v_raw); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 53, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyBytes_AsUString(__pyx_v_raw); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(0, 54, __pyx_L1_error) (void)(memcpy(__pyx_v_self->_buf, ((unsigned char const *)__pyx_t_8), __pyx_v_n)); - /* "dataRead.pyx":54 + /* "dataRead.pyx":55 * n = len(raw) * memcpy(self._buf, raw, n) * self._buf_start = start # <<<<<<<<<<<<<< @@ -21314,7 +22187,7 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym */ __pyx_v_self->_buf_start = __pyx_v_start; - /* "dataRead.pyx":55 + /* "dataRead.pyx":56 * memcpy(self._buf, raw, n) * self._buf_start = start * self._buf_len = n # <<<<<<<<<<<<<< @@ -21323,7 +22196,7 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym */ __pyx_v_self->_buf_len = __pyx_v_n; - /* "dataRead.pyx":56 + /* "dataRead.pyx":57 * self._buf_start = start * self._buf_len = n * return 0 # <<<<<<<<<<<<<< @@ -21333,7 +22206,7 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym __pyx_r = 0; goto __pyx_L0; - /* "dataRead.pyx":43 + /* "dataRead.pyx":44 * self._pos = 0 * * cdef int _fill(self, Py_ssize_t pos) except -1: # <<<<<<<<<<<<<< @@ -21355,7 +22228,7 @@ static int __pyx_f_8dataRead_12SymBufReader__fill(struct __pyx_obj_8dataRead_Sym return __pyx_r; } -/* "dataRead.pyx":58 +/* "dataRead.pyx":59 * return 0 * * def seek(self, Py_ssize_t pos, int whence=0): # <<<<<<<<<<<<<< @@ -21420,19 +22293,19 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 59, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_whence); if (value) { values[1] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 59, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "seek") < 0)) __PYX_ERR(0, 58, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "seek") < 0)) __PYX_ERR(0, 59, __pyx_L3_error) } } else { switch (__pyx_nargs) { @@ -21443,16 +22316,16 @@ PyObject *__pyx_args, PyObject *__pyx_kwds default: goto __pyx_L5_argtuple_error; } } - __pyx_v_pos = __Pyx_PyIndex_AsSsize_t(values[0]); if (unlikely((__pyx_v_pos == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) + __pyx_v_pos = __Pyx_PyIndex_AsSsize_t(values[0]); if (unlikely((__pyx_v_pos == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 59, __pyx_L3_error) if (values[1]) { - __pyx_v_whence = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_whence == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 58, __pyx_L3_error) + __pyx_v_whence = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_whence == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 59, __pyx_L3_error) } else { __pyx_v_whence = ((int)0); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("seek", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 58, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("seek", 0, 1, 2, __pyx_nargs); __PYX_ERR(0, 59, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -21492,7 +22365,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR int __pyx_clineno = 0; __Pyx_RefNannySetupContext("seek", 1); - /* "dataRead.pyx":60 + /* "dataRead.pyx":61 * def seek(self, Py_ssize_t pos, int whence=0): * """Update logical cursor; does NOT touch the underlying file.""" * if whence == 0: # <<<<<<<<<<<<<< @@ -21502,7 +22375,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR switch (__pyx_v_whence) { case 0: - /* "dataRead.pyx":61 + /* "dataRead.pyx":62 * """Update logical cursor; does NOT touch the underlying file.""" * if whence == 0: * self._pos = pos # <<<<<<<<<<<<<< @@ -21511,7 +22384,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR */ __pyx_v_self->_pos = __pyx_v_pos; - /* "dataRead.pyx":60 + /* "dataRead.pyx":61 * def seek(self, Py_ssize_t pos, int whence=0): * """Update logical cursor; does NOT touch the underlying file.""" * if whence == 0: # <<<<<<<<<<<<<< @@ -21521,7 +22394,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR break; case 1: - /* "dataRead.pyx":63 + /* "dataRead.pyx":64 * self._pos = pos * elif whence == 1: * self._pos += pos # <<<<<<<<<<<<<< @@ -21530,7 +22403,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR */ __pyx_v_self->_pos = (__pyx_v_self->_pos + __pyx_v_pos); - /* "dataRead.pyx":62 + /* "dataRead.pyx":63 * if whence == 0: * self._pos = pos * elif whence == 1: # <<<<<<<<<<<<<< @@ -21540,28 +22413,28 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR break; default: - /* "dataRead.pyx":65 + /* "dataRead.pyx":66 * self._pos += pos * else: # whence == 2 (from end) * self._fid.seek(0, 2) # <<<<<<<<<<<<<< * self._pos = self._fid.tell() + pos * return self._pos */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_seek); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_seek); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __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; - /* "dataRead.pyx":66 + /* "dataRead.pyx":67 * else: # whence == 2 (from end) * self._fid.seek(0, 2) * self._pos = self._fid.tell() + pos # <<<<<<<<<<<<<< * return self._pos * */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_tell); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_tell); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_4 = 0; @@ -21581,23 +22454,23 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_pos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_pos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error) + __pyx_t_3 = PyNumber_Add(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_self->_pos = __pyx_t_5; break; } - /* "dataRead.pyx":67 + /* "dataRead.pyx":68 * self._fid.seek(0, 2) * self._pos = self._fid.tell() + pos * return self._pos # <<<<<<<<<<<<<< @@ -21605,13 +22478,13 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR * def tell(self): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 67, __pyx_L1_error) + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_self->_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 68, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_r = __pyx_t_3; __pyx_t_3 = 0; goto __pyx_L0; - /* "dataRead.pyx":58 + /* "dataRead.pyx":59 * return 0 * * def seek(self, Py_ssize_t pos, int whence=0): # <<<<<<<<<<<<<< @@ -21632,7 +22505,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_2seek(struct __pyx_obj_8dataR return __pyx_r; } -/* "dataRead.pyx":69 +/* "dataRead.pyx":70 * return self._pos * * def tell(self): # <<<<<<<<<<<<<< @@ -21690,7 +22563,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_4tell(struct __pyx_obj_8dataR int __pyx_clineno = 0; __Pyx_RefNannySetupContext("tell", 1); - /* "dataRead.pyx":70 + /* "dataRead.pyx":71 * * def tell(self): * return self._pos # <<<<<<<<<<<<<< @@ -21698,13 +22571,13 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_4tell(struct __pyx_obj_8dataR * def read(self, Py_ssize_t n=-1): */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_pos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) + __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->_pos); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0; - /* "dataRead.pyx":69 + /* "dataRead.pyx":70 * return self._pos * * def tell(self): # <<<<<<<<<<<<<< @@ -21723,7 +22596,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_4tell(struct __pyx_obj_8dataR return __pyx_r; } -/* "dataRead.pyx":72 +/* "dataRead.pyx":73 * return self._pos * * def read(self, Py_ssize_t n=-1): # <<<<<<<<<<<<<< @@ -21784,12 +22657,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds if (kw_args > 0) { PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n); if (value) { values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "read") < 0)) __PYX_ERR(0, 72, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "read") < 0)) __PYX_ERR(0, 73, __pyx_L3_error) } } else { switch (__pyx_nargs) { @@ -21800,14 +22673,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds } } if (values[0]) { - __pyx_v_n = __Pyx_PyIndex_AsSsize_t(values[0]); if (unlikely((__pyx_v_n == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 72, __pyx_L3_error) + __pyx_v_n = __Pyx_PyIndex_AsSsize_t(values[0]); if (unlikely((__pyx_v_n == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L3_error) } else { __pyx_v_n = ((Py_ssize_t)-1L); } } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("read", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 72, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("read", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 73, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -21854,7 +22727,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR int __pyx_clineno = 0; __Pyx_RefNannySetupContext("read", 1); - /* "dataRead.pyx":74 + /* "dataRead.pyx":75 * def read(self, Py_ssize_t n=-1): * """Return up to n bytes from the current position (or all if n<0).""" * cdef Py_ssize_t pos = self._pos # <<<<<<<<<<<<<< @@ -21864,7 +22737,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR __pyx_t_1 = __pyx_v_self->_pos; __pyx_v_pos = __pyx_t_1; - /* "dataRead.pyx":76 + /* "dataRead.pyx":77 * cdef Py_ssize_t pos = self._pos * cdef Py_ssize_t buf_end, offset, available, end * buf_end = self._buf_start + self._buf_len # <<<<<<<<<<<<<< @@ -21873,7 +22746,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR */ __pyx_v_buf_end = (__pyx_v_self->_buf_start + __pyx_v_self->_buf_len); - /* "dataRead.pyx":78 + /* "dataRead.pyx":79 * buf_end = self._buf_start + self._buf_len * # Fast path: serve directly from buffer * if self._buf_len > 0 and self._buf_start <= pos < buf_end: # <<<<<<<<<<<<<< @@ -21894,7 +22767,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR __pyx_L4_bool_binop_done:; if (__pyx_t_2) { - /* "dataRead.pyx":79 + /* "dataRead.pyx":80 * # Fast path: serve directly from buffer * if self._buf_len > 0 and self._buf_start <= pos < buf_end: * offset = pos - self._buf_start # <<<<<<<<<<<<<< @@ -21903,7 +22776,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR */ __pyx_v_offset = (__pyx_v_pos - __pyx_v_self->_buf_start); - /* "dataRead.pyx":80 + /* "dataRead.pyx":81 * if self._buf_len > 0 and self._buf_start <= pos < buf_end: * offset = pos - self._buf_start * available = self._buf_len - offset # <<<<<<<<<<<<<< @@ -21912,7 +22785,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR */ __pyx_v_available = (__pyx_v_self->_buf_len - __pyx_v_offset); - /* "dataRead.pyx":81 + /* "dataRead.pyx":82 * offset = pos - self._buf_start * available = self._buf_len - offset * if n < 0 or available >= n: # <<<<<<<<<<<<<< @@ -21930,7 +22803,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR __pyx_L7_bool_binop_done:; if (__pyx_t_2) { - /* "dataRead.pyx":82 + /* "dataRead.pyx":83 * available = self._buf_len - offset * if n < 0 or available >= n: * end = offset + (n if n >= 0 else available) # <<<<<<<<<<<<<< @@ -21945,32 +22818,32 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR } __pyx_v_end = (__pyx_v_offset + __pyx_t_1); - /* "dataRead.pyx":83 + /* "dataRead.pyx":84 * if n < 0 or available >= n: * end = offset + (n if n >= 0 else available) * data = bytes(self._buf[offset:end]) # <<<<<<<<<<<<<< * self._pos += len(data) * return data */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_self->_buf) + __pyx_v_offset, __pyx_v_end - __pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 83, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_self->_buf) + __pyx_v_offset, __pyx_v_end - __pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 84, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_data = ((PyObject*)__pyx_t_5); __pyx_t_5 = 0; - /* "dataRead.pyx":84 + /* "dataRead.pyx":85 * end = offset + (n if n >= 0 else available) * data = bytes(self._buf[offset:end]) * self._pos += len(data) # <<<<<<<<<<<<<< * return data * # Buffer miss: refill centred on pos, then serve */ - __pyx_t_1 = __Pyx_PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 84, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 85, __pyx_L1_error) __pyx_v_self->_pos = (__pyx_v_self->_pos + __pyx_t_1); - /* "dataRead.pyx":85 + /* "dataRead.pyx":86 * data = bytes(self._buf[offset:end]) * self._pos += len(data) * return data # <<<<<<<<<<<<<< @@ -21982,7 +22855,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR __pyx_r = __pyx_v_data; goto __pyx_L0; - /* "dataRead.pyx":81 + /* "dataRead.pyx":82 * offset = pos - self._buf_start * available = self._buf_len - offset * if n < 0 or available >= n: # <<<<<<<<<<<<<< @@ -21991,7 +22864,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR */ } - /* "dataRead.pyx":78 + /* "dataRead.pyx":79 * buf_end = self._buf_start + self._buf_len * # Fast path: serve directly from buffer * if self._buf_len > 0 and self._buf_start <= pos < buf_end: # <<<<<<<<<<<<<< @@ -22000,16 +22873,16 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR */ } - /* "dataRead.pyx":87 + /* "dataRead.pyx":88 * return data * # Buffer miss: refill centred on pos, then serve * self._fill(pos) # <<<<<<<<<<<<<< * offset = pos - self._buf_start * if offset >= self._buf_len: */ - __pyx_t_6 = ((struct __pyx_vtabstruct_8dataRead_SymBufReader *)__pyx_v_self->__pyx_vtab)->_fill(__pyx_v_self, __pyx_v_pos); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 87, __pyx_L1_error) + __pyx_t_6 = ((struct __pyx_vtabstruct_8dataRead_SymBufReader *)__pyx_v_self->__pyx_vtab)->_fill(__pyx_v_self, __pyx_v_pos); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 88, __pyx_L1_error) - /* "dataRead.pyx":88 + /* "dataRead.pyx":89 * # Buffer miss: refill centred on pos, then serve * self._fill(pos) * offset = pos - self._buf_start # <<<<<<<<<<<<<< @@ -22018,7 +22891,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR */ __pyx_v_offset = (__pyx_v_pos - __pyx_v_self->_buf_start); - /* "dataRead.pyx":89 + /* "dataRead.pyx":90 * self._fill(pos) * offset = pos - self._buf_start * if offset >= self._buf_len: # <<<<<<<<<<<<<< @@ -22028,7 +22901,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR __pyx_t_2 = (__pyx_v_offset >= __pyx_v_self->_buf_len); if (__pyx_t_2) { - /* "dataRead.pyx":90 + /* "dataRead.pyx":91 * offset = pos - self._buf_start * if offset >= self._buf_len: * return b'' # <<<<<<<<<<<<<< @@ -22040,7 +22913,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR __pyx_r = __pyx_kp_b__12; goto __pyx_L0; - /* "dataRead.pyx":89 + /* "dataRead.pyx":90 * self._fill(pos) * offset = pos - self._buf_start * if offset >= self._buf_len: # <<<<<<<<<<<<<< @@ -22049,7 +22922,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR */ } - /* "dataRead.pyx":91 + /* "dataRead.pyx":92 * if offset >= self._buf_len: * return b'' * available = self._buf_len - offset # <<<<<<<<<<<<<< @@ -22058,7 +22931,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR */ __pyx_v_available = (__pyx_v_self->_buf_len - __pyx_v_offset); - /* "dataRead.pyx":92 + /* "dataRead.pyx":93 * return b'' * available = self._buf_len - offset * end = offset + (n if n >= 0 else available) # <<<<<<<<<<<<<< @@ -22073,32 +22946,32 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR } __pyx_v_end = (__pyx_v_offset + __pyx_t_1); - /* "dataRead.pyx":93 + /* "dataRead.pyx":94 * available = self._buf_len - offset * end = offset + (n if n >= 0 else available) * data = bytes(self._buf[offset:end]) # <<<<<<<<<<<<<< * self._pos += len(data) * return data */ - __pyx_t_5 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_self->_buf) + __pyx_v_offset, __pyx_v_end - __pyx_v_offset); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_self->_buf) + __pyx_v_offset, __pyx_v_end - __pyx_v_offset); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 94, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 93, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 94, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_data = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":94 + /* "dataRead.pyx":95 * end = offset + (n if n >= 0 else available) * data = bytes(self._buf[offset:end]) * self._pos += len(data) # <<<<<<<<<<<<<< * return data * */ - __pyx_t_1 = __Pyx_PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 94, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 95, __pyx_L1_error) __pyx_v_self->_pos = (__pyx_v_self->_pos + __pyx_t_1); - /* "dataRead.pyx":95 + /* "dataRead.pyx":96 * data = bytes(self._buf[offset:end]) * self._pos += len(data) * return data # <<<<<<<<<<<<<< @@ -22110,7 +22983,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR __pyx_r = __pyx_v_data; goto __pyx_L0; - /* "dataRead.pyx":72 + /* "dataRead.pyx":73 * return self._pos * * def read(self, Py_ssize_t n=-1): # <<<<<<<<<<<<<< @@ -22131,7 +23004,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_6read(struct __pyx_obj_8dataR return __pyx_r; } -/* "dataRead.pyx":97 +/* "dataRead.pyx":98 * return data * * def fileno(self): # <<<<<<<<<<<<<< @@ -22192,7 +23065,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_8fileno(struct __pyx_obj_8dat int __pyx_clineno = 0; __Pyx_RefNannySetupContext("fileno", 1); - /* "dataRead.pyx":98 + /* "dataRead.pyx":99 * * def fileno(self): * return self._fid.fileno() # <<<<<<<<<<<<<< @@ -22200,7 +23073,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_8fileno(struct __pyx_obj_8dat * */ __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_fileno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 98, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_fid, __pyx_n_s_fileno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; __pyx_t_4 = 0; @@ -22220,7 +23093,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_8fileno(struct __pyx_obj_8dat PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error) + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } @@ -22228,7 +23101,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_8fileno(struct __pyx_obj_8dat __pyx_t_1 = 0; goto __pyx_L0; - /* "dataRead.pyx":97 + /* "dataRead.pyx":98 * return data * * def fileno(self): # <<<<<<<<<<<<<< @@ -22674,3953 +23547,4073 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_12__setstate_cython__(struct return __pyx_r; } -/* "dataRead.pyx":101 +/* "dataRead.pyx":187 * * - * @cython.boundscheck(False) # <<<<<<<<<<<<<< - * @cython.wraparound(False) - * def sorted_data_read(bytes tmp, unsigned short bit_count, + * cdef str _fast_read_tx(int fd, uint64_t pointer): # <<<<<<<<<<<<<< + * """Read TX block text via pread. Returns '' if pointer is 0 or read fails.""" + * cdef _TXHdr hdr */ -/* Python wrapper */ -static PyObject *__pyx_pw_8dataRead_1sorted_data_read(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -PyDoc_STRVAR(__pyx_doc_8dataRead_sorted_data_read, "dataRead function to read in cython a channel from a byte stream\n\n Parameters\n ------------\n tmp : bytes\n byte stream\n bit_count : unsigned short\n number of bit taken by the channel in the record\n signal_data_type : unsigned short\n int to describe data type\n record_format : string\n basic numpy dtype description of data type, used to create\n returned numpy ndarray\n number_of_records : unsigned long long\n number of records in byte stream\n record_byte_size : unsigned long\n number of bytes taken by one record repeated in byte stream\n bit_offset : unsigned char\n bit offset of data in C aligned bytes\n pos_byte_beg : unsigned long\n beginning byte position of channel in record\n n_bytes : unsigned long\n bytes length of channel in record\n array : boolean\n reads an array, not a vector\n\n Returns\n -------\n ndarray of type record_format with number_of_records records.\n Byte order is swapped if necessary to match machine byte order before bits offset and masking\n "); -static PyMethodDef __pyx_mdef_8dataRead_1sorted_data_read = {"sorted_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_1sorted_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_sorted_data_read}; -static PyObject *__pyx_pw_8dataRead_1sorted_data_read(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - PyObject *__pyx_v_tmp = 0; - unsigned short __pyx_v_bit_count; - unsigned short __pyx_v_signal_data_type; - PyObject *__pyx_v_record_format = 0; - unsigned PY_LONG_LONG __pyx_v_number_of_records; - unsigned long __pyx_v_record_byte_size; - unsigned char __pyx_v_bit_offset; - unsigned long __pyx_v_pos_byte_beg; - unsigned long __pyx_v_n_bytes; - PyObject *__pyx_v_array = 0; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("sorted_data_read (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tmp,&__pyx_n_s_bit_count,&__pyx_n_s_signal_data_type,&__pyx_n_s_record_format,&__pyx_n_s_number_of_records,&__pyx_n_s_record_byte_size,&__pyx_n_s_bit_offset,&__pyx_n_s_pos_byte_beg,&__pyx_n_s_n_bytes,&__pyx_n_s_array,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tmp)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_bit_count)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 1); __PYX_ERR(0, 101, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 2); __PYX_ERR(0, 101, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_format)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 3); __PYX_ERR(0, 101, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_number_of_records)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 4); __PYX_ERR(0, 101, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_byte_size)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[5]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 5); __PYX_ERR(0, 101, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_bit_offset)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[6]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 6); __PYX_ERR(0, 101, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pos_byte_beg)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[7]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 7); __PYX_ERR(0, 101, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_bytes)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[8]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 8); __PYX_ERR(0, 101, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_array)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[9]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 9); __PYX_ERR(0, 101, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sorted_data_read") < 0)) __PYX_ERR(0, 101, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 10)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); - values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); - values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); - values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); - values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); - } - __pyx_v_tmp = ((PyObject*)values[0]); - __pyx_v_bit_count = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_bit_count == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 103, __pyx_L3_error) - __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L3_error) - __pyx_v_record_format = ((PyObject*)values[3]); - __pyx_v_number_of_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_number_of_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L3_error) - __pyx_v_record_byte_size = __Pyx_PyInt_As_unsigned_long(values[5]); if (unlikely((__pyx_v_record_byte_size == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error) - __pyx_v_bit_offset = __Pyx_PyInt_As_unsigned_char(values[6]); if (unlikely((__pyx_v_bit_offset == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 105, __pyx_L3_error) - __pyx_v_pos_byte_beg = __Pyx_PyInt_As_unsigned_long(values[7]); if (unlikely((__pyx_v_pos_byte_beg == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error) - __pyx_v_n_bytes = __Pyx_PyInt_As_unsigned_long(values[8]); if (unlikely((__pyx_v_n_bytes == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L3_error) - __pyx_v_array = values[9]; - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, __pyx_nargs); __PYX_ERR(0, 101, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("dataRead.sorted_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 103, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_record_format), (&PyUnicode_Type), 1, "record_format", 1))) __PYX_ERR(0, 104, __pyx_L1_error) - __pyx_r = __pyx_pf_8dataRead_sorted_data_read(__pyx_self, __pyx_v_tmp, __pyx_v_bit_count, __pyx_v_signal_data_type, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_bit_offset, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_array); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_8dataRead_sorted_data_read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tmp, unsigned short __pyx_v_bit_count, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, PyObject *__pyx_v_array) { - char const *__pyx_v_bit_stream; - CYTHON_UNUSED long __pyx_v_swap_flag; +static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_v_pointer) { + struct __pyx_t_8dataRead__TXHdr __pyx_v_hdr; + Py_ssize_t __pyx_v_content_len; + Py_ssize_t __pyx_v_end; + Py_ssize_t __pyx_v_nread; + unsigned char *__pyx_v_buf; + PyObject *__pyx_v_result = 0; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - char *__pyx_t_1; + int __pyx_t_1; int __pyx_t_2; - int __pyx_t_3; + PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; int __pyx_t_5; - unsigned char __pyx_t_6; + int __pyx_t_6; + char const *__pyx_t_7; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("sorted_data_read", 1); + __Pyx_RefNannySetupContext("_fast_read_tx", 1); - /* "dataRead.pyx":138 - * Byte order is swapped if necessary to match machine byte order before bits offset and masking - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< - * if not array: - * if 'V' in record_format or 'S' in record_format or record_format is None: + /* "dataRead.pyx":194 + * cdef str result + * + * if pointer == 0: # <<<<<<<<<<<<<< + * return '' + * with nogil: */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 138, __pyx_L1_error) - __pyx_v_bit_stream = __pyx_t_1; + __pyx_t_1 = (__pyx_v_pointer == 0); + if (__pyx_t_1) { - /* "dataRead.pyx":139 - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * if not array: # <<<<<<<<<<<<<< - * if 'V' in record_format or 'S' in record_format or record_format is None: - * return read_byte(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":195 + * + * if pointer == 0: + * return '' # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, &hdr, 24, pointer) */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_array); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 139, __pyx_L1_error) - __pyx_t_3 = (!__pyx_t_2); - if (__pyx_t_3) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L0; - /* "dataRead.pyx":140 - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * if not array: - * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + /* "dataRead.pyx":194 + * cdef str result + * + * if pointer == 0: # <<<<<<<<<<<<<< + * return '' + * with nogil: */ - if (unlikely(__pyx_v_record_format == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 140, __pyx_L1_error) - } - __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_V, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 140, __pyx_L1_error) - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L5_bool_binop_done; - } - if (unlikely(__pyx_v_record_format == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 140, __pyx_L1_error) - } - __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_S, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 140, __pyx_L1_error) - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L5_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_record_format == ((PyObject*)Py_None)); - __pyx_t_3 = __pyx_t_2; - __pyx_L5_bool_binop_done:; - if (__pyx_t_3) { + } - /* "dataRead.pyx":141 - * if not array: - * if 'V' in record_format or 'S' in record_format or record_format is None: - * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float + /* "dataRead.pyx":196 + * if pointer == 0: + * return '' + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: */ - __Pyx_XDECREF(__pyx_r); + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":142 - * if 'V' in record_format or 'S' in record_format or record_format is None: - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ + /* "dataRead.pyx":197 + * return '' + * with nogil: + * nread = c_pread(fd, &hdr, 24, pointer) # <<<<<<<<<<<<<< + * if nread < 24 or hdr.length <= 24: + * return '' */ - __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 141, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_hdr), 24, __pyx_v_pointer); + } - /* "dataRead.pyx":140 - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * if not array: - * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + /* "dataRead.pyx":196 + * if pointer == 0: + * return '' + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: */ - } + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L6; + } + __pyx_L6:; + } + } - /* "dataRead.pyx":143 - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":198 + * with nogil: + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: # <<<<<<<<<<<<<< + * return '' + * content_len = (hdr.length - 24) */ - switch (__pyx_v_signal_data_type) { - case 4: - case 5: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; - } - __pyx_t_5 = __pyx_t_2; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L8_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_n_bytes == 4); - __pyx_t_3 = __pyx_t_5; - __pyx_L8_bool_binop_done:; - if (__pyx_t_3) { + __pyx_t_2 = (__pyx_v_nread < 24); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_hdr.length <= 24); + __pyx_t_1 = __pyx_t_2; + __pyx_L8_bool_binop_done:; + if (__pyx_t_1) { - /* "dataRead.pyx":144 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":199 + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: + * return '' # <<<<<<<<<<<<<< + * content_len = (hdr.length - 24) + * if content_len <= 0: */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 144, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 144, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_5) { - goto __pyx_L12_next_or; - } else { - } - __pyx_t_5 = (__pyx_v_signal_data_type == 4); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L11_bool_binop_done; - } - __pyx_L12_next_or:; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L0; - /* "dataRead.pyx":145 - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":198 + * with nogil: + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: # <<<<<<<<<<<<<< + * return '' + * content_len = (hdr.length - 24) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 145, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 145, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L11_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_signal_data_type == 5); - __pyx_t_3 = __pyx_t_5; - __pyx_L11_bool_binop_done:; + } - /* "dataRead.pyx":144 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":200 + * if nread < 24 or hdr.length <= 24: + * return '' + * content_len = (hdr.length - 24) # <<<<<<<<<<<<<< + * if content_len <= 0: + * return '' */ - if (__pyx_t_3) { + __pyx_v_content_len = ((Py_ssize_t)(__pyx_v_hdr.length - 24)); - /* "dataRead.pyx":146 - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes + /* "dataRead.pyx":201 + * return '' + * content_len = (hdr.length - 24) + * if content_len <= 0: # <<<<<<<<<<<<<< + * return '' + * buf = PyMem_Malloc(content_len + 1) */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = (__pyx_v_content_len <= 0); + if (__pyx_t_1) { - /* "dataRead.pyx":147 - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_float(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":202 + * content_len = (hdr.length - 24) + * if content_len <= 0: + * return '' # <<<<<<<<<<<<<< + * buf = PyMem_Malloc(content_len + 1) + * if buf == NULL: */ - __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 146, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L0; - /* "dataRead.pyx":144 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_float(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":201 + * return '' + * content_len = (hdr.length - 24) + * if content_len <= 0: # <<<<<<<<<<<<<< + * return '' + * buf = PyMem_Malloc(content_len + 1) */ - } + } - /* "dataRead.pyx":149 - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes - * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double + /* "dataRead.pyx":203 + * if content_len <= 0: + * return '' + * buf = PyMem_Malloc(content_len + 1) # <<<<<<<<<<<<<< + * if buf == NULL: + * return '' */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __pyx_v_buf = ((unsigned char *)PyMem_Malloc((__pyx_v_content_len + 1))); - /* "dataRead.pyx":150 - * else: # swap bytes - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ + /* "dataRead.pyx":204 + * return '' + * buf = PyMem_Malloc(content_len + 1) + * if buf == NULL: # <<<<<<<<<<<<<< + * return '' + * try: */ - __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __pyx_t_1 = (__pyx_v_buf == NULL); + if (__pyx_t_1) { - /* "dataRead.pyx":143 - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":205 + * buf = PyMem_Malloc(content_len + 1) + * if buf == NULL: + * return '' # <<<<<<<<<<<<<< + * try: + * with nogil: */ - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L0; - /* "dataRead.pyx":151 - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":204 + * return '' + * buf = PyMem_Malloc(content_len + 1) + * if buf == NULL: # <<<<<<<<<<<<<< + * return '' + * try: */ - switch (__pyx_v_signal_data_type) { - case 4: - case 5: - __pyx_t_5 = 1; - break; - default: - __pyx_t_5 = 0; - break; + } + + /* "dataRead.pyx":206 + * if buf == NULL: + * return '' + * try: # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, buf, content_len, pointer + 24) + */ + /*try:*/ { + + /* "dataRead.pyx":207 + * return '' + * try: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: + */ + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + + /* "dataRead.pyx":208 + * try: + * with nogil: + * nread = c_pread(fd, buf, content_len, pointer + 24) # <<<<<<<<<<<<<< + * if nread < 1: + * return '' + */ + __pyx_v_nread = pread(__pyx_v_fd, __pyx_v_buf, __pyx_v_content_len, (__pyx_v_pointer + 24)); + } + + /* "dataRead.pyx":207 + * return '' + * try: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L17; + } + __pyx_L17:; + } } - __pyx_t_2 = __pyx_t_5; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L15_bool_binop_done; + + /* "dataRead.pyx":209 + * with nogil: + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: # <<<<<<<<<<<<<< + * return '' + * end = nread + */ + __pyx_t_1 = (__pyx_v_nread < 1); + if (__pyx_t_1) { + + /* "dataRead.pyx":210 + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: + * return '' # <<<<<<<<<<<<<< + * end = nread + * while end > 0 and buf[end - 1] == 0: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L12_return; + + /* "dataRead.pyx":209 + * with nogil: + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: # <<<<<<<<<<<<<< + * return '' + * end = nread + */ } - __pyx_t_2 = (__pyx_v_n_bytes == 8); - __pyx_t_3 = __pyx_t_2; - __pyx_L15_bool_binop_done:; - if (__pyx_t_3) { - /* "dataRead.pyx":152 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":211 + * if nread < 1: + * return '' + * end = nread # <<<<<<<<<<<<<< + * while end > 0 and buf[end - 1] == 0: + * end -= 1 */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 152, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 152, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_2) { - goto __pyx_L19_next_or; - } else { - } - __pyx_t_2 = (__pyx_v_signal_data_type == 4); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L18_bool_binop_done; - } - __pyx_L19_next_or:; + __pyx_v_end = __pyx_v_nread; - /* "dataRead.pyx":153 - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":212 + * return '' + * end = nread + * while end > 0 and buf[end - 1] == 0: # <<<<<<<<<<<<<< + * end -= 1 + * buf[end] = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + while (1) { + __pyx_t_2 = (__pyx_v_end > 0); if (__pyx_t_2) { } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L18_bool_binop_done; + __pyx_t_1 = __pyx_t_2; + goto __pyx_L21_bool_binop_done; } - __pyx_t_2 = (__pyx_v_signal_data_type == 5); - __pyx_t_3 = __pyx_t_2; - __pyx_L18_bool_binop_done:; + __pyx_t_2 = ((__pyx_v_buf[(__pyx_v_end - 1)]) == 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L21_bool_binop_done:; + if (!__pyx_t_1) break; - /* "dataRead.pyx":152 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":213 + * end = nread + * while end > 0 and buf[end - 1] == 0: + * end -= 1 # <<<<<<<<<<<<<< + * buf[end] = 0 + * result = (buf[:end]).decode('UTF-8', 'ignore') */ - if (__pyx_t_3) { + __pyx_v_end = (__pyx_v_end - 1); + } - /* "dataRead.pyx":154 - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes + /* "dataRead.pyx":214 + * while end > 0 and buf[end - 1] == 0: + * end -= 1 + * buf[end] = 0 # <<<<<<<<<<<<<< + * result = (buf[:end]).decode('UTF-8', 'ignore') + * finally: */ - __Pyx_XDECREF(__pyx_r); + (__pyx_v_buf[__pyx_v_end]) = 0; - /* "dataRead.pyx":155 - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_double(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":215 + * end -= 1 + * buf[end] = 0 + * result = (buf[:end]).decode('UTF-8', 'ignore') # <<<<<<<<<<<<<< + * finally: + * PyMem_Free(buf) */ - __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 154, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 215, __pyx_L13_error) + __Pyx_GOTREF(__pyx_t_3); + if (unlikely(__pyx_t_3 == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); + __PYX_ERR(0, 215, __pyx_L13_error) + } + __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_t_3), 0, PY_SSIZE_T_MAX, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 215, __pyx_L13_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + } - /* "dataRead.pyx":152 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_double(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":217 + * result = (buf[:end]).decode('UTF-8', 'ignore') + * finally: + * PyMem_Free(buf) # <<<<<<<<<<<<<< + * return result + * */ + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_buf); + goto __pyx_L14; + } + __pyx_L13_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename; + { + PyMem_Free(__pyx_v_buf); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); } + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10); + __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; + __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7; + goto __pyx_L1_error; + } + __pyx_L12_return: { + __pyx_t_14 = __pyx_r; + __pyx_r = 0; + PyMem_Free(__pyx_v_buf); + __pyx_r = __pyx_t_14; + __pyx_t_14 = 0; + goto __pyx_L0; + } + __pyx_L14:; + } - /* "dataRead.pyx":157 - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes - * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + /* "dataRead.pyx":218 + * finally: + * PyMem_Free(buf) + * return result # <<<<<<<<<<<<<< + * + * */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __Pyx_XDECREF(__pyx_r); + if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); __PYX_ERR(0, 218, __pyx_L1_error) } + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L0; - /* "dataRead.pyx":158 - * else: # swap bytes - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ + /* "dataRead.pyx":187 + * + * + * cdef str _fast_read_tx(int fd, uint64_t pointer): # <<<<<<<<<<<<<< + * """Read TX block text via pread. Returns '' if pointer is 0 or read fails.""" + * cdef _TXHdr hdr */ - __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 157, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - /* "dataRead.pyx":151 - * return read_float(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dataRead._fast_read_tx", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":221 + * + * + * cdef str _fast_read_tx_or_md(int fd, uint64_t pointer): # <<<<<<<<<<<<<< + * """Read TX or MD block via pread. + * */ - } - /* "dataRead.pyx":159 - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): +static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_v_pointer) { + struct __pyx_t_8dataRead__TXHdr __pyx_v_hdr; + Py_ssize_t __pyx_v_content_len; + Py_ssize_t __pyx_v_nread; + Py_ssize_t __pyx_v_tx_start; + Py_ssize_t __pyx_v_tx_end; + Py_ssize_t __pyx_v_end; + unsigned char *__pyx_v_buf; + PyObject *__pyx_v_payload = 0; + PyObject *__pyx_v_result = 0; + PyObject *__pyx_v__obj = NULL; + PyObject *__pyx_v_xml_tree = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + PyObject *__pyx_t_9 = NULL; + unsigned int __pyx_t_10; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + int __pyx_t_14; + int __pyx_t_15; + char const *__pyx_t_16; + PyObject *__pyx_t_17 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_fast_read_tx_or_md", 1); + + /* "dataRead.pyx":234 + * cdef str result + * + * if pointer == 0: # <<<<<<<<<<<<<< + * return '' + * with nogil: */ - switch (__pyx_v_signal_data_type) { - case 4: - case 5: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; - } - __pyx_t_5 = __pyx_t_2; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L22_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_n_bytes == 2); - __pyx_t_3 = __pyx_t_5; - __pyx_L22_bool_binop_done:; - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_pointer == 0); + if (__pyx_t_1) { - /* "dataRead.pyx":160 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":235 + * + * if pointer == 0: + * return '' # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, &hdr, 24, pointer) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 160, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_5) { - goto __pyx_L26_next_or; - } else { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L0; + + /* "dataRead.pyx":234 + * cdef str result + * + * if pointer == 0: # <<<<<<<<<<<<<< + * return '' + * with nogil: + */ + } + + /* "dataRead.pyx":236 + * if pointer == 0: + * return '' + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: + */ + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { + + /* "dataRead.pyx":237 + * return '' + * with nogil: + * nread = c_pread(fd, &hdr, 24, pointer) # <<<<<<<<<<<<<< + * if nread < 24 or hdr.length <= 24: + * return '' + */ + __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_hdr), 24, __pyx_v_pointer); } - __pyx_t_5 = (__pyx_v_signal_data_type == 4); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L25_bool_binop_done; + + /* "dataRead.pyx":236 + * if pointer == 0: + * return '' + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L6; + } + __pyx_L6:; } - __pyx_L26_next_or:; + } - /* "dataRead.pyx":161 - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":238 + * with nogil: + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: # <<<<<<<<<<<<<< + * return '' + * content_len = (hdr.length - 24) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 161, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 161, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L25_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_signal_data_type == 5); - __pyx_t_3 = __pyx_t_5; - __pyx_L25_bool_binop_done:; + __pyx_t_2 = (__pyx_v_nread < 24); + if (!__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_hdr.length <= 24); + __pyx_t_1 = __pyx_t_2; + __pyx_L8_bool_binop_done:; + if (__pyx_t_1) { - /* "dataRead.pyx":160 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":239 + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: + * return '' # <<<<<<<<<<<<<< + * content_len = (hdr.length - 24) + * if content_len <= 0: */ - if (__pyx_t_3) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L0; - /* "dataRead.pyx":162 - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes + /* "dataRead.pyx":238 + * with nogil: + * nread = c_pread(fd, &hdr, 24, pointer) + * if nread < 24 or hdr.length <= 24: # <<<<<<<<<<<<<< + * return '' + * content_len = (hdr.length - 24) */ - __Pyx_XDECREF(__pyx_r); + } - /* "dataRead.pyx":163 - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_half(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":240 + * if nread < 24 or hdr.length <= 24: + * return '' + * content_len = (hdr.length - 24) # <<<<<<<<<<<<<< + * if content_len <= 0: + * return '' */ - __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_v_content_len = ((Py_ssize_t)(__pyx_v_hdr.length - 24)); - /* "dataRead.pyx":160 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision - * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 5): - * return read_half(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":241 + * return '' + * content_len = (hdr.length - 24) + * if content_len <= 0: # <<<<<<<<<<<<<< + * return '' + * buf = PyMem_Malloc(content_len + 1) */ - } + __pyx_t_1 = (__pyx_v_content_len <= 0); + if (__pyx_t_1) { - /* "dataRead.pyx":165 - * record_byte_size, pos_byte_beg, 0) - * else: # swap bytes - * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char + /* "dataRead.pyx":242 + * content_len = (hdr.length - 24) + * if content_len <= 0: + * return '' # <<<<<<<<<<<<<< + * buf = PyMem_Malloc(content_len + 1) + * if buf == NULL: */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L0; - /* "dataRead.pyx":166 - * else: # swap bytes - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char - * return read_unsigned_char(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":241 + * return '' + * content_len = (hdr.length - 24) + * if content_len <= 0: # <<<<<<<<<<<<<< + * return '' + * buf = PyMem_Malloc(content_len + 1) */ - __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 165, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + } - /* "dataRead.pyx":159 - * return read_double(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 4) or \ - * (byteorder == 'big' and signal_data_type == 5): + /* "dataRead.pyx":243 + * if content_len <= 0: + * return '' + * buf = PyMem_Malloc(content_len + 1) # <<<<<<<<<<<<<< + * if buf == NULL: + * return '' */ - } + __pyx_v_buf = ((unsigned char *)PyMem_Malloc((__pyx_v_content_len + 1))); - /* "dataRead.pyx":167 - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< - * return read_unsigned_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) + /* "dataRead.pyx":244 + * return '' + * buf = PyMem_Malloc(content_len + 1) + * if buf == NULL: # <<<<<<<<<<<<<< + * return '' + * try: */ - switch (__pyx_v_signal_data_type) { - case 0: - case 1: - case 13: - __pyx_t_5 = 1; - break; - default: - __pyx_t_5 = 0; - break; - } - __pyx_t_2 = __pyx_t_5; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L29_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_n_bytes == 1); - __pyx_t_3 = __pyx_t_2; - __pyx_L29_bool_binop_done:; - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_buf == NULL); + if (__pyx_t_1) { - /* "dataRead.pyx":168 - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char - * return read_unsigned_char(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char + /* "dataRead.pyx":245 + * buf = PyMem_Malloc(content_len + 1) + * if buf == NULL: + * return '' # <<<<<<<<<<<<<< + * try: + * with nogil: */ - __Pyx_XDECREF(__pyx_r); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L0; - /* "dataRead.pyx":169 - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char - * return read_unsigned_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) # <<<<<<<<<<<<<< - * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char - * return read_signed_char(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":244 + * return '' + * buf = PyMem_Malloc(content_len + 1) + * if buf == NULL: # <<<<<<<<<<<<<< + * return '' + * try: */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + } - /* "dataRead.pyx":167 - * return read_half(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 1) - * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< - * return read_unsigned_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) + /* "dataRead.pyx":246 + * if buf == NULL: + * return '' + * try: # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, buf, content_len, pointer + 24) */ - } + /*try:*/ { - /* "dataRead.pyx":170 - * return read_unsigned_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char # <<<<<<<<<<<<<< - * return read_signed_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) + /* "dataRead.pyx":247 + * return '' + * try: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: */ - switch (__pyx_v_signal_data_type) { - case 2: - case 3: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; - } - __pyx_t_5 = __pyx_t_2; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L31_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_n_bytes == 1); - __pyx_t_3 = __pyx_t_5; - __pyx_L31_bool_binop_done:; - if (__pyx_t_3) { + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":171 - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char - * return read_signed_char(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short + /* "dataRead.pyx":248 + * try: + * with nogil: + * nread = c_pread(fd, buf, content_len, pointer + 24) # <<<<<<<<<<<<<< + * if nread < 1: + * return '' */ - __Pyx_XDECREF(__pyx_r); + __pyx_v_nread = pread(__pyx_v_fd, __pyx_v_buf, __pyx_v_content_len, (__pyx_v_pointer + 24)); + } - /* "dataRead.pyx":172 - * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char - * return read_signed_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) # <<<<<<<<<<<<<< - * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short - * if (byteorder == 'little' and signal_data_type == 0) or \ + /* "dataRead.pyx":247 + * return '' + * try: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L17; + } + __pyx_L17:; + } + } + + /* "dataRead.pyx":249 + * with nogil: + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: # <<<<<<<<<<<<<< + * return '' + * end = nread */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_t_1 = (__pyx_v_nread < 1); + if (__pyx_t_1) { - /* "dataRead.pyx":170 - * return read_unsigned_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char # <<<<<<<<<<<<<< - * return read_signed_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) + /* "dataRead.pyx":250 + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: + * return '' # <<<<<<<<<<<<<< + * end = nread + * while end > 0 and buf[end - 1] == 0: */ - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L12_return; - /* "dataRead.pyx":173 - * return read_signed_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): + /* "dataRead.pyx":249 + * with nogil: + * nread = c_pread(fd, buf, content_len, pointer + 24) + * if nread < 1: # <<<<<<<<<<<<<< + * return '' + * end = nread */ - switch (__pyx_v_signal_data_type) { - case 0: - case 1: - case 13: - case 14: - __pyx_t_5 = 1; - break; - default: - __pyx_t_5 = 0; - break; } - __pyx_t_2 = __pyx_t_5; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L33_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_n_bytes <= 2); - __pyx_t_3 = __pyx_t_2; - __pyx_L33_bool_binop_done:; - if (__pyx_t_3) { - /* "dataRead.pyx":174 - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_short(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":251 + * if nread < 1: + * return '' + * end = nread # <<<<<<<<<<<<<< + * while end > 0 and buf[end - 1] == 0: + * end -= 1 */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_2) { - goto __pyx_L37_next_or; - } else { - } - __pyx_t_2 = (__pyx_v_signal_data_type == 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L36_bool_binop_done; - } - __pyx_L37_next_or:; + __pyx_v_end = __pyx_v_nread; - /* "dataRead.pyx":175 - * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< - * return read_unsigned_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) + /* "dataRead.pyx":252 + * return '' + * end = nread + * while end > 0 and buf[end - 1] == 0: # <<<<<<<<<<<<<< + * end -= 1 + * # TX block (id[2]=='T', id[3]=='X') */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + while (1) { + __pyx_t_2 = (__pyx_v_end > 0); if (__pyx_t_2) { } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L36_bool_binop_done; + __pyx_t_1 = __pyx_t_2; + goto __pyx_L21_bool_binop_done; } - __pyx_t_2 = (__pyx_v_signal_data_type == 1); - __pyx_t_3 = __pyx_t_2; - __pyx_L36_bool_binop_done:; + __pyx_t_2 = ((__pyx_v_buf[(__pyx_v_end - 1)]) == 0); + __pyx_t_1 = __pyx_t_2; + __pyx_L21_bool_binop_done:; + if (!__pyx_t_1) break; - /* "dataRead.pyx":174 - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_short(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":253 + * end = nread + * while end > 0 and buf[end - 1] == 0: + * end -= 1 # <<<<<<<<<<<<<< + * # TX block (id[2]=='T', id[3]=='X') + * if hdr.id[2] == b'T' and hdr.id[3] == b'X': */ - if (__pyx_t_3) { + __pyx_v_end = (__pyx_v_end - 1); + } - /* "dataRead.pyx":176 - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) - * else: # swap bytes + /* "dataRead.pyx":255 + * end -= 1 + * # TX block (id[2]=='T', id[3]=='X') + * if hdr.id[2] == b'T' and hdr.id[3] == b'X': # <<<<<<<<<<<<<< + * buf[end] = 0 + * result = (buf[:end]).decode('UTF-8', 'ignore') */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = ((__pyx_v_hdr.id[2]) == 'T'); + if (__pyx_t_2) { + } else { + __pyx_t_1 = __pyx_t_2; + goto __pyx_L24_bool_binop_done; + } + __pyx_t_2 = ((__pyx_v_hdr.id[3]) == 'X'); + __pyx_t_1 = __pyx_t_2; + __pyx_L24_bool_binop_done:; + if (__pyx_t_1) { - /* "dataRead.pyx":177 - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_unsigned_short(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":256 + * # TX block (id[2]=='T', id[3]=='X') + * if hdr.id[2] == b'T' and hdr.id[3] == b'X': + * buf[end] = 0 # <<<<<<<<<<<<<< + * result = (buf[:end]).decode('UTF-8', 'ignore') + * return result */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + (__pyx_v_buf[__pyx_v_end]) = 0; - /* "dataRead.pyx":174 - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_short(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":257 + * if hdr.id[2] == b'T' and hdr.id[3] == b'X': + * buf[end] = 0 + * result = (buf[:end]).decode('UTF-8', 'ignore') # <<<<<<<<<<<<<< + * return result + * # MD block: fast ... scan */ + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 257, __pyx_L13_error) + __Pyx_GOTREF(__pyx_t_3); + if (unlikely(__pyx_t_3 == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); + __PYX_ERR(0, 257, __pyx_L13_error) } + __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_t_3), 0, PY_SSIZE_T_MAX, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L13_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":179 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) - * else: # swap bytes - * return read_unsigned_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short + /* "dataRead.pyx":258 + * buf[end] = 0 + * result = (buf[:end]).decode('UTF-8', 'ignore') + * return result # <<<<<<<<<<<<<< + * # MD block: fast ... scan + * payload = bytes(buf[:end]) */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L12_return; - /* "dataRead.pyx":180 - * else: # swap bytes - * return read_unsigned_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short - * if (byteorder == 'little' and signal_data_type == 2) or \ + /* "dataRead.pyx":255 + * end -= 1 + * # TX block (id[2]=='T', id[3]=='X') + * if hdr.id[2] == b'T' and hdr.id[3] == b'X': # <<<<<<<<<<<<<< + * buf[end] = 0 + * result = (buf[:end]).decode('UTF-8', 'ignore') */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + } - /* "dataRead.pyx":173 - * return read_signed_char(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset) - * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): + /* "dataRead.pyx":260 + * return result + * # MD block: fast ... scan + * payload = bytes(buf[:end]) # <<<<<<<<<<<<<< + * tx_start = payload.find(b'') + * if tx_start >= 0: */ - } + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 260, __pyx_L13_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 260, __pyx_L13_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_payload = ((PyObject*)__pyx_t_3); + __pyx_t_3 = 0; - /* "dataRead.pyx":181 - * return read_unsigned_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): + /* "dataRead.pyx":261 + * # MD block: fast ... scan + * payload = bytes(buf[:end]) + * tx_start = payload.find(b'') # <<<<<<<<<<<<<< + * if tx_start >= 0: + * tx_start += 4 */ - switch (__pyx_v_signal_data_type) { - case 2: - case 3: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; - } - __pyx_t_5 = __pyx_t_2; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L40_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_n_bytes <= 2); - __pyx_t_3 = __pyx_t_5; - __pyx_L40_bool_binop_done:; - if (__pyx_t_3) { + __pyx_t_3 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyBytes_Type_find, __pyx_v_payload, __pyx_kp_b_TX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 261, __pyx_L13_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 261, __pyx_L13_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_tx_start = __pyx_t_5; - /* "dataRead.pyx":182 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_short(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":262 + * payload = bytes(buf[:end]) + * tx_start = payload.find(b'') + * if tx_start >= 0: # <<<<<<<<<<<<<< + * tx_start += 4 + * tx_end = payload.find(b'', tx_start) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 182, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_5) { - goto __pyx_L44_next_or; - } else { - } - __pyx_t_5 = (__pyx_v_signal_data_type == 2); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L43_bool_binop_done; - } - __pyx_L44_next_or:; + __pyx_t_1 = (__pyx_v_tx_start >= 0); + if (__pyx_t_1) { - /* "dataRead.pyx":183 - * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< - * return read_signed_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) + /* "dataRead.pyx":263 + * tx_start = payload.find(b'') + * if tx_start >= 0: + * tx_start += 4 # <<<<<<<<<<<<<< + * tx_end = payload.find(b'', tx_start) + * if tx_end >= 0: + */ + __pyx_v_tx_start = (__pyx_v_tx_start + 4); + + /* "dataRead.pyx":264 + * if tx_start >= 0: + * tx_start += 4 + * tx_end = payload.find(b'', tx_start) # <<<<<<<<<<<<<< + * if tx_end >= 0: + * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error) + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_tx_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L13_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyBytes_Type_find, __pyx_v_payload, __pyx_kp_b_TX_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 264, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 264, __pyx_L13_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L43_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_signal_data_type == 3); - __pyx_t_3 = __pyx_t_5; - __pyx_L43_bool_binop_done:; + __pyx_v_tx_end = __pyx_t_5; - /* "dataRead.pyx":182 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_short(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":265 + * tx_start += 4 + * tx_end = payload.find(b'', tx_start) + * if tx_end >= 0: # <<<<<<<<<<<<<< + * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') + * # CDATA or namespaced XML: attempt lxml parse */ - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_tx_end >= 0); + if (__pyx_t_1) { - /* "dataRead.pyx":184 - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) - * else: # swap bytes + /* "dataRead.pyx":266 + * tx_end = payload.find(b'', tx_start) + * if tx_end >= 0: + * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') # <<<<<<<<<<<<<< + * # CDATA or namespaced XML: attempt lxml parse + * try: */ __Pyx_XDECREF(__pyx_r); - - /* "dataRead.pyx":185 - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_signed_short(bit_stream, record_format, number_of_records, - */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 184, __pyx_L1_error) + __pyx_t_4 = __Pyx_decode_bytes(__pyx_v_payload, __pyx_v_tx_start, __pyx_v_tx_end, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 266, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; + __pyx_r = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; - goto __pyx_L0; + goto __pyx_L12_return; - /* "dataRead.pyx":182 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_short(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":265 + * tx_start += 4 + * tx_end = payload.find(b'', tx_start) + * if tx_end >= 0: # <<<<<<<<<<<<<< + * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') + * # CDATA or namespaced XML: attempt lxml parse */ } - /* "dataRead.pyx":187 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) - * else: # swap bytes - * return read_signed_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int + /* "dataRead.pyx":262 + * payload = bytes(buf[:end]) + * tx_start = payload.find(b'') + * if tx_start >= 0: # <<<<<<<<<<<<<< + * tx_start += 4 + * tx_end = payload.find(b'', tx_start) */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + } - /* "dataRead.pyx":188 - * else: # swap bytes - * return read_signed_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int - * if (byteorder == 'little' and signal_data_type == 0) or \ + /* "dataRead.pyx":268 + * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') + * # CDATA or namespaced XML: attempt lxml parse + * try: # <<<<<<<<<<<<<< + * from lxml import objectify as _obj + * xml_tree = _obj.fromstring(payload) */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_8); + /*try:*/ { - /* "dataRead.pyx":181 - * return read_unsigned_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): + /* "dataRead.pyx":269 + * # CDATA or namespaced XML: attempt lxml parse + * try: + * from lxml import objectify as _obj # <<<<<<<<<<<<<< + * xml_tree = _obj.fromstring(payload) + * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. */ - } + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L28_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_n_s_objectify); + __Pyx_GIVEREF(__pyx_n_s_objectify); + if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_objectify)) __PYX_ERR(0, 269, __pyx_L28_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_lxml, __pyx_t_4, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L28_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_objectify); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L28_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_INCREF(__pyx_t_4); + __pyx_v__obj = __pyx_t_4; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":189 - * return read_signed_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): + /* "dataRead.pyx":270 + * try: + * from lxml import objectify as _obj + * xml_tree = _obj.fromstring(payload) # <<<<<<<<<<<<<< + * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. + * try: */ - switch (__pyx_v_signal_data_type) { - case 0: - case 1: - case 14: - __pyx_t_5 = 1; - break; - default: - __pyx_t_5 = 0; - break; - } - __pyx_t_2 = __pyx_t_5; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L47_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_n_bytes <= 4); - __pyx_t_3 = __pyx_t_2; - __pyx_L47_bool_binop_done:; - if (__pyx_t_3) { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__obj, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L28_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_9 = NULL; + __pyx_t_10 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_9)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_9); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_10 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_payload}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L28_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_v_xml_tree = __pyx_t_3; + __pyx_t_3 = 0; - /* "dataRead.pyx":190 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":272 + * xml_tree = _obj.fromstring(payload) + * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.TX) + * except AttributeError: */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 190, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 190, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_2) { - goto __pyx_L51_next_or; - } else { - } - __pyx_t_2 = (__pyx_v_signal_data_type == 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L50_bool_binop_done; - } - __pyx_L51_next_or:; - - /* "dataRead.pyx":191 - * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< - * return read_unsigned_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + /*try:*/ { + + /* "dataRead.pyx":273 + * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. + * try: + * return str(xml_tree.TX) # <<<<<<<<<<<<<< + * except AttributeError: + * pass */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 191, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L50_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_signal_data_type == 1); - __pyx_t_3 = __pyx_t_2; - __pyx_L50_bool_binop_done:; + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L34_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L34_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + goto __pyx_L38_try_return; + + /* "dataRead.pyx":272 + * xml_tree = _obj.fromstring(payload) + * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.TX) + * except AttributeError: + */ + } + __pyx_L34_error:; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "dataRead.pyx":190 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":274 + * try: + * return str(xml_tree.TX) + * except AttributeError: # <<<<<<<<<<<<<< + * pass + * try: */ - if (__pyx_t_3) { + __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError); + if (__pyx_t_14) { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L35_exception_handled; + } + goto __pyx_L36_except_error; - /* "dataRead.pyx":192 - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) - * else: # swap bytes + /* "dataRead.pyx":272 + * xml_tree = _obj.fromstring(payload) + * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.TX) + * except AttributeError: + */ + __pyx_L36_except_error:; + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + goto __pyx_L28_error; + __pyx_L38_try_return:; + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + goto __pyx_L32_try_return; + __pyx_L35_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + } + + /* "dataRead.pyx":276 + * except AttributeError: + * pass + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.CNcomment.TX) + * except AttributeError: */ - __Pyx_XDECREF(__pyx_r); + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_11); + /*try:*/ { + + /* "dataRead.pyx":277 + * pass + * try: + * return str(xml_tree.CNcomment.TX) # <<<<<<<<<<<<<< + * except AttributeError: + * pass + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_CNcomment); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 277, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L40_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + goto __pyx_L44_try_return; + + /* "dataRead.pyx":276 + * except AttributeError: + * pass + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.CNcomment.TX) + * except AttributeError: + */ + } + __pyx_L40_error:; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "dataRead.pyx":193 - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_unsigned_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":278 + * try: + * return str(xml_tree.CNcomment.TX) + * except AttributeError: # <<<<<<<<<<<<<< + * pass + * try: */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError); + if (__pyx_t_14) { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L41_exception_handled; + } + goto __pyx_L42_except_error; - /* "dataRead.pyx":190 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":276 + * except AttributeError: + * pass + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.CNcomment.TX) + * except AttributeError: + */ + __pyx_L42_except_error:; + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11); + goto __pyx_L28_error; + __pyx_L44_try_return:; + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11); + goto __pyx_L32_try_return; + __pyx_L41_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11); + } + + /* "dataRead.pyx":280 + * except AttributeError: + * pass + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.CNunit.TX) + * except AttributeError: */ - } + { + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + /*try:*/ { + + /* "dataRead.pyx":281 + * pass + * try: + * return str(xml_tree.CNunit.TX) # <<<<<<<<<<<<<< + * except AttributeError: + * pass + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_CNunit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L46_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 281, __pyx_L46_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L46_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + goto __pyx_L50_try_return; + + /* "dataRead.pyx":280 + * except AttributeError: + * pass + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.CNunit.TX) + * except AttributeError: + */ + } + __pyx_L46_error:; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "dataRead.pyx":195 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) - * else: # swap bytes - * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int + /* "dataRead.pyx":282 + * try: + * return str(xml_tree.CNunit.TX) + * except AttributeError: # <<<<<<<<<<<<<< + * pass + * except Exception: + */ + __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError); + if (__pyx_t_14) { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L47_exception_handled; + } + goto __pyx_L48_except_error; + + /* "dataRead.pyx":280 + * except AttributeError: + * pass + * try: # <<<<<<<<<<<<<< + * return str(xml_tree.CNunit.TX) + * except AttributeError: + */ + __pyx_L48_except_error:; + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + goto __pyx_L28_error; + __pyx_L50_try_return:; + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + goto __pyx_L32_try_return; + __pyx_L47_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); + } + + /* "dataRead.pyx":268 + * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') + * # CDATA or namespaced XML: attempt lxml parse + * try: # <<<<<<<<<<<<<< + * from lxml import objectify as _obj + * xml_tree = _obj.fromstring(payload) */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + } + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + goto __pyx_L33_try_end; + __pyx_L28_error:; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "dataRead.pyx":196 - * else: # swap bytes - * return read_unsigned_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int - * if (byteorder == 'little' and signal_data_type == 2) or \ + /* "dataRead.pyx":284 + * except AttributeError: + * pass + * except Exception: # <<<<<<<<<<<<<< + * pass + * return '' */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0]))); + if (__pyx_t_14) { + __Pyx_ErrRestore(0,0,0); + goto __pyx_L29_exception_handled; } + goto __pyx_L30_except_error; - /* "dataRead.pyx":189 - * return read_signed_short(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) - * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): + /* "dataRead.pyx":268 + * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') + * # CDATA or namespaced XML: attempt lxml parse + * try: # <<<<<<<<<<<<<< + * from lxml import objectify as _obj + * xml_tree = _obj.fromstring(payload) */ + __pyx_L30_except_error:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + goto __pyx_L13_error; + __pyx_L32_try_return:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + goto __pyx_L12_return; + __pyx_L29_exception_handled:; + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8); + __pyx_L33_try_end:; } - /* "dataRead.pyx":197 - * return read_unsigned_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): + /* "dataRead.pyx":286 + * except Exception: + * pass + * return '' # <<<<<<<<<<<<<< + * finally: + * PyMem_Free(buf) */ - switch (__pyx_v_signal_data_type) { - case 2: - case 3: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; - } - __pyx_t_5 = __pyx_t_2; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L54_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_n_bytes <= 4); - __pyx_t_3 = __pyx_t_5; - __pyx_L54_bool_binop_done:; - if (__pyx_t_3) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_r = __pyx_kp_u__12; + goto __pyx_L12_return; + } - /* "dataRead.pyx":198 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":288 + * return '' + * finally: + * PyMem_Free(buf) # <<<<<<<<<<<<<< + * + * */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 198, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_5) { - goto __pyx_L58_next_or; - } else { + /*finally:*/ { + __pyx_L13_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_8); + __Pyx_XGOTREF(__pyx_t_7); + __Pyx_XGOTREF(__pyx_t_6); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_11); + __pyx_t_14 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename; + { + PyMem_Free(__pyx_v_buf); } - __pyx_t_5 = (__pyx_v_signal_data_type == 2); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L57_bool_binop_done; + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11); } - __pyx_L58_next_or:; + __Pyx_XGIVEREF(__pyx_t_8); + __Pyx_XGIVEREF(__pyx_t_7); + __Pyx_XGIVEREF(__pyx_t_6); + __Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6); + __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; __pyx_t_11 = 0; + __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16; + goto __pyx_L1_error; + } + __pyx_L12_return: { + __pyx_t_17 = __pyx_r; + __pyx_r = 0; + PyMem_Free(__pyx_v_buf); + __pyx_r = __pyx_t_17; + __pyx_t_17 = 0; + goto __pyx_L0; + } + } - /* "dataRead.pyx":199 - * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< - * return read_signed_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + /* "dataRead.pyx":221 + * + * + * cdef str _fast_read_tx_or_md(int fd, uint64_t pointer): # <<<<<<<<<<<<<< + * """Read TX or MD block via pread. + * */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 199, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 199, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L57_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_signal_data_type == 3); - __pyx_t_3 = __pyx_t_5; - __pyx_L57_bool_binop_done:; - /* "dataRead.pyx":198 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_int(bit_stream, record_format, number_of_records, + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_9); + __Pyx_AddTraceback("dataRead._fast_read_tx_or_md", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_payload); + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XDECREF(__pyx_v__obj); + __Pyx_XDECREF(__pyx_v_xml_tree); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":291 + * + * + * cdef dict _fast_read_si(int fd, uint64_t pointer): # <<<<<<<<<<<<<< + * """Read SI block and return a dict matching the SIBlock format. + * */ - if (__pyx_t_3) { - /* "dataRead.pyx":200 - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) - * else: # swap bytes +static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_v_pointer) { + struct __pyx_t_8dataRead__SIBlock __pyx_v_si; + Py_ssize_t __pyx_v_nread; + PyObject *__pyx_v_result = 0; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + int __pyx_t_1; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + unsigned int __pyx_t_7; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("_fast_read_si", 1); + + /* "dataRead.pyx":300 + * cdef dict result + * + * if pointer == 0: # <<<<<<<<<<<<<< + * return None + * with nogil: */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = (__pyx_v_pointer == 0); + if (__pyx_t_1) { - /* "dataRead.pyx":201 - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_signed_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":301 + * + * if pointer == 0: + * return None # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, &si, 56, pointer) */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 200, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __Pyx_XDECREF(__pyx_r); + __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "dataRead.pyx":198 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":300 + * cdef dict result + * + * if pointer == 0: # <<<<<<<<<<<<<< + * return None + * with nogil: */ - } + } - /* "dataRead.pyx":203 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) - * else: # swap bytes - * return read_signed_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long + /* "dataRead.pyx":302 + * if pointer == 0: + * return None + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &si, 56, pointer) + * if nread < 56: */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":204 - * else: # swap bytes - * return read_signed_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long - * if (byteorder == 'little' and signal_data_type == 0) or \ + /* "dataRead.pyx":303 + * return None + * with nogil: + * nread = c_pread(fd, &si, 56, pointer) # <<<<<<<<<<<<<< + * if nread < 56: + * return None */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_si), 56, __pyx_v_pointer); } - /* "dataRead.pyx":197 - * return read_unsigned_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): - */ - } + /* "dataRead.pyx":302 + * if pointer == 0: + * return None + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &si, 56, pointer) + * if nread < 56: + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L6; + } + __pyx_L6:; + } + } - /* "dataRead.pyx":205 - * return read_signed_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): + /* "dataRead.pyx":304 + * with nogil: + * nread = c_pread(fd, &si, 56, pointer) + * if nread < 56: # <<<<<<<<<<<<<< + * return None + * result = { */ - switch (__pyx_v_signal_data_type) { - case 0: - case 1: - __pyx_t_5 = 1; - break; - default: - __pyx_t_5 = 0; - break; - } - __pyx_t_2 = __pyx_t_5; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L61_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_n_bytes <= 8); - __pyx_t_3 = __pyx_t_2; - __pyx_L61_bool_binop_done:; - if (__pyx_t_3) { + __pyx_t_1 = (__pyx_v_nread < 56); + if (__pyx_t_1) { - /* "dataRead.pyx":206 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":305 + * nread = c_pread(fd, &si, 56, pointer) + * if nread < 56: + * return None # <<<<<<<<<<<<<< + * result = { + * 'id': b'##SI', */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 206, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_2) { - goto __pyx_L65_next_or; - } else { - } - __pyx_t_2 = (__pyx_v_signal_data_type == 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L64_bool_binop_done; - } - __pyx_L65_next_or:; + __Pyx_XDECREF(__pyx_r); + __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); + goto __pyx_L0; - /* "dataRead.pyx":207 - * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + /* "dataRead.pyx":304 + * with nogil: + * nread = c_pread(fd, &si, 56, pointer) + * if nread < 56: # <<<<<<<<<<<<<< + * return None + * result = { */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 207, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L64_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_signal_data_type == 1); - __pyx_t_3 = __pyx_t_2; - __pyx_L64_bool_binop_done:; + } - /* "dataRead.pyx":206 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":307 + * return None + * result = { + * 'id': b'##SI', # <<<<<<<<<<<<<< + * 'length': si.length, + * 'link_count': si.link_count, */ - if (__pyx_t_3) { + __pyx_t_2 = __Pyx_PyDict_NewPresized(11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_id, __pyx_kp_b_SI) < 0) __PYX_ERR(0, 307, __pyx_L1_error) - /* "dataRead.pyx":208 - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) - * else: # swap bytes + /* "dataRead.pyx":308 + * result = { + * 'id': b'##SI', + * 'length': si.length, # <<<<<<<<<<<<<< + * 'link_count': si.link_count, + * 'si_tx_name': si.si_tx_name, */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.length); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_length, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":209 - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":309 + * 'id': b'##SI', + * 'length': si.length, + * 'link_count': si.link_count, # <<<<<<<<<<<<<< + * 'si_tx_name': si.si_tx_name, + * 'si_tx_path': si.si_tx_path, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.link_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_link_count, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":206 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long - * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 1): - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":310 + * 'length': si.length, + * 'link_count': si.link_count, + * 'si_tx_name': si.si_tx_name, # <<<<<<<<<<<<<< + * 'si_tx_path': si.si_tx_path, + * 'si_md_comment': si.si_md_comment, */ - } + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_tx_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 310, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_tx_name, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":211 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) - * else: # swap bytes - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long + /* "dataRead.pyx":311 + * 'link_count': si.link_count, + * 'si_tx_name': si.si_tx_name, + * 'si_tx_path': si.si_tx_path, # <<<<<<<<<<<<<< + * 'si_md_comment': si.si_md_comment, + * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_tx_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_tx_path, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":212 - * else: # swap bytes - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long - * if (byteorder == 'little' and signal_data_type == 2) or \ + /* "dataRead.pyx":312 + * 'si_tx_name': si.si_tx_name, + * 'si_tx_path': si.si_tx_path, + * 'si_md_comment': si.si_md_comment, # <<<<<<<<<<<<<< + * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), + * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_md_comment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_md_comment, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":205 - * return read_signed_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 0) or \ - * (byteorder == 'big' and signal_data_type == 1): + /* "dataRead.pyx":313 + * 'si_tx_path': si.si_tx_path, + * 'si_md_comment': si.si_md_comment, + * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), # <<<<<<<<<<<<<< + * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), + * 'si_flags': si.si_flags, */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_SI_TYPE_MAP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_7 = 1; } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_4, __pyx_n_u_OTHER}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_type, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":213 - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): + /* "dataRead.pyx":314 + * 'si_md_comment': si.si_md_comment, + * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), + * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), # <<<<<<<<<<<<<< + * 'si_flags': si.si_flags, + * 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, */ - switch (__pyx_v_signal_data_type) { - case 2: - case 3: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; - } - __pyx_t_5 = __pyx_t_2; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L68_bool_binop_done; + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_SI_BUS_MAP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 314, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 314, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_bus_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 314, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = NULL; + __pyx_t_7 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_7 = 1; } - __pyx_t_5 = (__pyx_v_n_bytes <= 8); - __pyx_t_3 = __pyx_t_5; - __pyx_L68_bool_binop_done:; - if (__pyx_t_3) { + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_6, __pyx_t_5, __pyx_n_u_NONE}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 314, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_bus_type, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":214 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_longlong(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":315 + * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), + * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), + * 'si_flags': si.si_flags, # <<<<<<<<<<<<<< + * 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, + * 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 214, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_5) { - goto __pyx_L72_next_or; - } else { - } - __pyx_t_5 = (__pyx_v_signal_data_type == 2); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L71_bool_binop_done; - } - __pyx_L72_next_or:; + __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_flags, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":215 - * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< - * return read_signed_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + /* "dataRead.pyx":316 + * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), + * 'si_flags': si.si_flags, + * 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, # <<<<<<<<<<<<<< + * 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, + * } */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 215, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L71_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_signal_data_type == 3); - __pyx_t_3 = __pyx_t_5; - __pyx_L71_bool_binop_done:; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_si.si_tx_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_Comment, __pyx_t_4) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_source_name, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":214 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_longlong(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":317 + * 'si_flags': si.si_flags, + * 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, + * 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, # <<<<<<<<<<<<<< + * } + * return result */ - if (__pyx_t_3) { + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_si.si_tx_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_Comment, __pyx_t_4) < 0) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_source_path, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_result = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; - /* "dataRead.pyx":216 - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) - * else: # swap bytes + /* "dataRead.pyx":319 + * 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, + * } + * return result # <<<<<<<<<<<<<< + * + * */ - __Pyx_XDECREF(__pyx_r); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_result); + __pyx_r = __pyx_v_result; + goto __pyx_L0; - /* "dataRead.pyx":217 - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_signed_longlong(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":291 + * + * + * cdef dict _fast_read_si(int fd, uint64_t pointer): # <<<<<<<<<<<<<< + * """Read SI block and return a dict matching the SIBlock format. + * */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); 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; - /* "dataRead.pyx":214 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long - * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 3): - * return read_signed_longlong(bit_stream, record_format, number_of_records, - */ - } + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("dataRead._fast_read_si", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":219 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) - * else: # swap bytes - * return read_signed_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (15, 16): # complex +/* "dataRead.pyx":322 + * + * + * def read_cn_chain_fast(object fid, uint64_t first_pointer, # <<<<<<<<<<<<<< + * dict si_cache, int minimal, bint channel_name_list): + * """Read the CN linked list starting at first_pointer using pread(). */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":220 - * else: # swap bytes - * return read_signed_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< - * elif signal_data_type in (15, 16): # complex - * if (byteorder == 'little' and signal_data_type == 15) or \ - */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_1read_cn_chain_fast(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8dataRead_read_cn_chain_fast, "Read the CN linked list starting at first_pointer using pread().\n\n Parameters\n ----------\n fid : file object (must support fileno())\n first_pointer : uint64_t\n File offset of the first CN block in the chain\n si_cache : dict\n Shared SI block cache keyed by file offset; updated in-place\n minimal : int\n 0 = load all metadata; non-zero = skip SI and XML comment\n channel_name_list : bool\n True = read only channel names (skip CC/SI/unit/comment)\n\n Returns\n -------\n list of (cn_key, cn_dict, cc_dict) tuples\n cn_key is positive (byte_offset*8 + bit_offset) or negative (DS mode)\n cn_dict and cc_dict match the structure produced by read_cn_block()\n cc_dict has '_needs_completion'=True for cc_type 3/7-11\n "); +static PyMethodDef __pyx_mdef_8dataRead_1read_cn_chain_fast = {"read_cn_chain_fast", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_1read_cn_chain_fast, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_read_cn_chain_fast}; +static PyObject *__pyx_pw_8dataRead_1read_cn_chain_fast(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_fid = 0; + uint64_t __pyx_v_first_pointer; + PyObject *__pyx_v_si_cache = 0; + int __pyx_v_minimal; + int __pyx_v_channel_name_list; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("read_cn_chain_fast (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_fid,&__pyx_n_s_first_pointer,&__pyx_n_s_si_cache,&__pyx_n_s_minimal,&__pyx_n_s_channel_name_list,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_fid)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_first_pointer)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 1); __PYX_ERR(0, 322, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_si_cache)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 2); __PYX_ERR(0, 322, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_minimal)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 3); __PYX_ERR(0, 322, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_channel_name_list)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 4); __PYX_ERR(0, 322, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "read_cn_chain_fast") < 0)) __PYX_ERR(0, 322, __pyx_L3_error) } + } else if (unlikely(__pyx_nargs != 5)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + } + __pyx_v_fid = values[0]; + __pyx_v_first_pointer = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_first_pointer == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + __pyx_v_si_cache = ((PyObject*)values[2]); + __pyx_v_minimal = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_minimal == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 323, __pyx_L3_error) + __pyx_v_channel_name_list = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_channel_name_list == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 323, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 322, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.read_cn_chain_fast", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_si_cache), (&PyDict_Type), 1, "si_cache", 1))) __PYX_ERR(0, 323, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_read_cn_chain_fast(__pyx_self, __pyx_v_fid, __pyx_v_first_pointer, __pyx_v_si_cache, __pyx_v_minimal, __pyx_v_channel_name_list); - /* "dataRead.pyx":213 - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 2) or \ - * (byteorder == 'big' and signal_data_type == 3): - */ + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":221 - * return read_signed_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (15, 16): # complex # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 15) or \ - * (byteorder == 'big' and signal_data_type == 16): +static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_fid, uint64_t __pyx_v_first_pointer, PyObject *__pyx_v_si_cache, int __pyx_v_minimal, int __pyx_v_channel_name_list) { + int __pyx_v_fd; + uint64_t __pyx_v_pointer; + struct __pyx_t_8dataRead__CNFixedHdr __pyx_v_cn_hdr; + struct __pyx_t_8dataRead__CNData __pyx_v_cn_dat; + struct __pyx_t_8dataRead__CCFixedHdr __pyx_v_cc_hdr; + struct __pyx_t_8dataRead__CCData __pyx_v_cc_dat; + Py_ssize_t __pyx_v_nread; + Py_ssize_t __pyx_v_data_offset; + Py_ssize_t __pyx_v_cc_data_offset; + Py_ssize_t __pyx_v_n_extra; + Py_ssize_t __pyx_v_n_bytes; + uint64_t __pyx_v_cn_key_uint; + uint64_t __pyx_v_si_ptr; + uint64_t __pyx_v_cc_ptr; + int64_t __pyx_v_cn_key_neg; + PyObject *__pyx_v_cn_key = 0; + PyObject *__pyx_v_results = 0; + PyObject *__pyx_v_cn_dict = 0; + PyObject *__pyx_v_cc_dict = 0; + PyObject *__pyx_v_si_dict = 0; + PyObject *__pyx_v_cn_name = 0; + PyObject *__pyx_v_unit_str = 0; + PyObject *__pyx_v_desc_str = 0; + unsigned char __pyx_v_extra_buf[0x200]; + double *__pyx_v_dbl_ptr; + unsigned char *__pyx_v_cc_val_buf; + PyObject *__pyx_v_cc_val_list = 0; + uint32_t __pyx_v_i; + PyObject *__pyx_v_extra_links = NULL; + long __pyx_v_lnk; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + unsigned int __pyx_t_4; + int __pyx_t_5; + int __pyx_t_6; + Py_ssize_t __pyx_t_7; + Py_ssize_t __pyx_t_8; + uint32_t __pyx_t_9; + int __pyx_t_10; + uint64_t __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + uint16_t __pyx_t_14; + uint16_t __pyx_t_15; + int __pyx_t_16; + char const *__pyx_t_17; + PyObject *__pyx_t_18 = NULL; + PyObject *__pyx_t_19 = NULL; + PyObject *__pyx_t_20 = NULL; + PyObject *__pyx_t_21 = NULL; + PyObject *__pyx_t_22 = NULL; + PyObject *__pyx_t_23 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_cn_chain_fast", 1); + + /* "dataRead.pyx":345 + * cc_dict has '_needs_completion'=True for cc_type 3/7-11 + * """ + * cdef int fd = fid.fileno() # <<<<<<<<<<<<<< + * cdef uint64_t pointer = first_pointer + * cdef _CNFixedHdr cn_hdr */ - switch (__pyx_v_signal_data_type) { - case 15: - case 16: - __pyx_t_3 = 1; - break; - default: - __pyx_t_3 = 0; - break; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_fid, __pyx_n_s_fileno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(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; } - __pyx_t_5 = __pyx_t_3; - if (__pyx_t_5) { + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 345, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 345, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_fd = __pyx_t_5; - /* "dataRead.pyx":222 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (15, 16): # complex - * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 16): - * swap_flag = 0 + /* "dataRead.pyx":346 + * """ + * cdef int fd = fid.fileno() + * cdef uint64_t pointer = first_pointer # <<<<<<<<<<<<<< + * cdef _CNFixedHdr cn_hdr + * cdef _CNData cn_dat */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 222, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_3) { - goto __pyx_L77_next_or; - } else { - } - __pyx_t_3 = (__pyx_v_signal_data_type == 15); - if (!__pyx_t_3) { - } else { - __pyx_t_5 = __pyx_t_3; - goto __pyx_L76_bool_binop_done; - } - __pyx_L77_next_or:; + __pyx_v_pointer = __pyx_v_first_pointer; - /* "dataRead.pyx":223 - * elif signal_data_type in (15, 16): # complex - * if (byteorder == 'little' and signal_data_type == 15) or \ - * (byteorder == 'big' and signal_data_type == 16): # <<<<<<<<<<<<<< - * swap_flag = 0 - * else: # swap bytes + /* "dataRead.pyx":355 + * cdef int64_t cn_key_neg + * cdef object cn_key + * cdef list results = [] # <<<<<<<<<<<<<< + * cdef dict cn_dict, cc_dict, si_dict + * cdef str cn_name, unit_str, desc_str */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 223, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_3) { - } else { - __pyx_t_5 = __pyx_t_3; - goto __pyx_L76_bool_binop_done; - } - __pyx_t_3 = (__pyx_v_signal_data_type == 16); - __pyx_t_5 = __pyx_t_3; - __pyx_L76_bool_binop_done:; + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_results = ((PyObject*)__pyx_t_1); + __pyx_t_1 = 0; - /* "dataRead.pyx":222 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (15, 16): # complex - * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 16): - * swap_flag = 0 + /* "dataRead.pyx":364 + * cdef uint32_t i + * + * while pointer != 0: # <<<<<<<<<<<<<< + * # Read CN fixed header + 8 standard links (88 bytes) + * with nogil: */ - if (__pyx_t_5) { + while (1) { + __pyx_t_6 = (__pyx_v_pointer != 0); + if (!__pyx_t_6) break; - /* "dataRead.pyx":224 - * if (byteorder == 'little' and signal_data_type == 15) or \ - * (byteorder == 'big' and signal_data_type == 16): - * swap_flag = 0 # <<<<<<<<<<<<<< - * else: # swap bytes - * swap_flag = 1 + /* "dataRead.pyx":366 + * while pointer != 0: + * # Read CN fixed header + 8 standard links (88 bytes) + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &cn_hdr, 88, pointer) + * if nread < 88: */ - __pyx_v_swap_flag = 0; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":222 - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (15, 16): # complex - * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type == 16): - * swap_flag = 0 + /* "dataRead.pyx":367 + * # Read CN fixed header + 8 standard links (88 bytes) + * with nogil: + * nread = c_pread(fd, &cn_hdr, 88, pointer) # <<<<<<<<<<<<<< + * if nread < 88: + * break */ - goto __pyx_L75; - } + __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_cn_hdr), 88, __pyx_v_pointer); + } - /* "dataRead.pyx":226 - * swap_flag = 0 - * else: # swap bytes - * swap_flag = 1 # <<<<<<<<<<<<<< - * if n_bytes == 16: - * return read_cdouble(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":366 + * while pointer != 0: + * # Read CN fixed header + 8 standard links (88 bytes) + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &cn_hdr, 88, pointer) + * if nread < 88: */ - /*else*/ { - __pyx_v_swap_flag = 1; - } - __pyx_L75:; + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L9; + } + __pyx_L9:; + } + } - /* "dataRead.pyx":227 - * else: # swap bytes - * swap_flag = 1 - * if n_bytes == 16: # <<<<<<<<<<<<<< - * return read_cdouble(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":368 + * with nogil: + * nread = c_pread(fd, &cn_hdr, 88, pointer) + * if nread < 88: # <<<<<<<<<<<<<< + * break + * */ - switch (__pyx_v_n_bytes) { - case 16: + __pyx_t_6 = (__pyx_v_nread < 88); + if (__pyx_t_6) { - /* "dataRead.pyx":228 - * swap_flag = 1 - * if n_bytes == 16: - * return read_cdouble(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes == 8: + /* "dataRead.pyx":369 + * nread = c_pread(fd, &cn_hdr, 88, pointer) + * if nread < 88: + * break # <<<<<<<<<<<<<< + * + * # Read CN data section (72 bytes at variable offset) */ - __Pyx_XDECREF(__pyx_r); + goto __pyx_L4_break; - /* "dataRead.pyx":229 - * if n_bytes == 16: - * return read_cdouble(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * elif n_bytes == 8: - * return read_cfloat(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":368 + * with nogil: + * nread = c_pread(fd, &cn_hdr, 88, pointer) + * if nread < 88: # <<<<<<<<<<<<<< + * break + * */ - __pyx_t_4 = __pyx_f_8dataRead_read_cdouble(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 228, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + } - /* "dataRead.pyx":227 - * else: # swap bytes - * swap_flag = 1 - * if n_bytes == 16: # <<<<<<<<<<<<<< - * return read_cdouble(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":372 + * + * # Read CN data section (72 bytes at variable offset) + * data_offset = 24 + (cn_hdr.link_count) * 8 # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) */ - break; - case 8: + __pyx_v_data_offset = (24 + (((Py_ssize_t)__pyx_v_cn_hdr.link_count) * 8)); - /* "dataRead.pyx":231 - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes == 8: - * return read_cfloat(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes == 4: + /* "dataRead.pyx":373 + * # Read CN data section (72 bytes at variable offset) + * data_offset = 24 + (cn_hdr.link_count) * 8 + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) + * if nread < 72: */ - __Pyx_XDECREF(__pyx_r); + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":232 - * elif n_bytes == 8: - * return read_cfloat(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * elif n_bytes == 4: - * return read_chalf(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":374 + * data_offset = 24 + (cn_hdr.link_count) * 8 + * with nogil: + * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) # <<<<<<<<<<<<<< + * if nread < 72: + * break */ - __pyx_t_4 = __pyx_f_8dataRead_read_cfloat(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_cn_dat), 72, (__pyx_v_pointer + __pyx_v_data_offset)); + } - /* "dataRead.pyx":230 - * return read_cdouble(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes == 8: # <<<<<<<<<<<<<< - * return read_cfloat(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":373 + * # Read CN data section (72 bytes at variable offset) + * data_offset = 24 + (cn_hdr.link_count) * 8 + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) + * if nread < 72: */ - break; - case 4: + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L15; + } + __pyx_L15:; + } + } - /* "dataRead.pyx":234 - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes == 4: - * return read_chalf(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes <= 4: + /* "dataRead.pyx":375 + * with nogil: + * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) + * if nread < 72: # <<<<<<<<<<<<<< + * break + * */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_6 = (__pyx_v_nread < 72); + if (__pyx_t_6) { - /* "dataRead.pyx":235 - * elif n_bytes == 4: - * return read_chalf(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< - * elif n_bytes <= 4: - * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) + /* "dataRead.pyx":376 + * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) + * if nread < 72: + * break # <<<<<<<<<<<<<< + * + * # Compute dict key */ - __pyx_t_4 = __pyx_f_8dataRead_read_chalf(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 234, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + goto __pyx_L4_break; - /* "dataRead.pyx":233 - * return read_cfloat(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes == 4: # <<<<<<<<<<<<<< - * return read_chalf(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) + /* "dataRead.pyx":375 + * with nogil: + * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) + * if nread < 72: # <<<<<<<<<<<<<< + * break + * */ - break; - default: break; - } + } - /* "dataRead.pyx":221 - * return read_signed_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) - * elif signal_data_type in (15, 16): # complex # <<<<<<<<<<<<<< - * if (byteorder == 'little' and signal_data_type == 15) or \ - * (byteorder == 'big' and signal_data_type == 16): + /* "dataRead.pyx":379 + * + * # Compute dict key + * if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE # <<<<<<<<<<<<<< + * cn_key_neg = -pointer + * cn_key = cn_key_neg */ - goto __pyx_L4; - } + __pyx_t_6 = ((__pyx_v_cn_dat.cn_flags & 0x20000) != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":236 - * return read_chalf(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes <= 4: # <<<<<<<<<<<<<< - * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) - * return read_unsigned_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":380 + * # Compute dict key + * if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE + * cn_key_neg = -pointer # <<<<<<<<<<<<<< + * cn_key = cn_key_neg + * else: */ - __pyx_t_5 = (__pyx_v_n_bytes <= 4); - if (__pyx_t_5) { + __pyx_v_cn_key_neg = (-((int64_t)__pyx_v_pointer)); - /* "dataRead.pyx":238 - * elif n_bytes <= 4: - * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) - * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, - * 0 if byteorder == 'little' else 1) + /* "dataRead.pyx":381 + * if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE + * cn_key_neg = -pointer + * cn_key = cn_key_neg # <<<<<<<<<<<<<< + * else: + * cn_key_uint = (cn_dat.cn_byte_offset) * 8 + cn_dat.cn_bit_offset */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_cn_key_neg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_cn_key, __pyx_t_1); + __pyx_t_1 = 0; - /* "dataRead.pyx":240 - * return read_unsigned_int(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, - * 0 if byteorder == 'little' else 1) # <<<<<<<<<<<<<< - * elif n_bytes <= 8: - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":379 + * + * # Compute dict key + * if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE # <<<<<<<<<<<<<< + * cn_key_neg = -pointer + * cn_key = cn_key_neg */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - __pyx_t_6 = 0; - } else { - __pyx_t_6 = 1; - } + goto __pyx_L17; + } - /* "dataRead.pyx":238 - * elif n_bytes <= 4: - * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) - * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, - * 0 if byteorder == 'little' else 1) + /* "dataRead.pyx":383 + * cn_key = cn_key_neg + * else: + * cn_key_uint = (cn_dat.cn_byte_offset) * 8 + cn_dat.cn_bit_offset # <<<<<<<<<<<<<< + * cn_key = cn_key_uint + * */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + /*else*/ { + __pyx_v_cn_key_uint = ((((uint64_t)__pyx_v_cn_dat.cn_byte_offset) * 8) + __pyx_v_cn_dat.cn_bit_offset); - /* "dataRead.pyx":236 - * return read_chalf(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, 0) - * elif n_bytes <= 4: # <<<<<<<<<<<<<< - * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) - * return read_unsigned_int(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":384 + * else: + * cn_key_uint = (cn_dat.cn_byte_offset) * 8 + cn_dat.cn_bit_offset + * cn_key = cn_key_uint # <<<<<<<<<<<<<< + * + * # Read channel name (TX block) */ + __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_key_uint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_cn_key, __pyx_t_1); + __pyx_t_1 = 0; } + __pyx_L17:; - /* "dataRead.pyx":241 - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, - * 0 if byteorder == 'little' else 1) - * elif n_bytes <= 8: # <<<<<<<<<<<<<< - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + /* "dataRead.pyx":387 + * + * # Read channel name (TX block) + * cn_name = _fast_read_tx(fd, cn_hdr.cn_tx_name) if cn_hdr.cn_tx_name else '' # <<<<<<<<<<<<<< + * + * # Build CN dict */ - __pyx_t_5 = (__pyx_v_n_bytes <= 8); - if (__pyx_t_5) { + __pyx_t_6 = (__pyx_v_cn_hdr.cn_tx_name != 0); + if (__pyx_t_6) { + __pyx_t_2 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_cn_hdr.cn_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __pyx_t_2; + __pyx_t_2 = 0; + } else { + __Pyx_INCREF(__pyx_kp_u__12); + __pyx_t_1 = __pyx_kp_u__12; + } + __Pyx_XDECREF_SET(__pyx_v_cn_name, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "dataRead.pyx":242 - * 0 if byteorder == 'little' else 1) - * elif n_bytes <= 8: - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, - * 0 if byteorder == 'little' else 1) + /* "dataRead.pyx":391 + * # Build CN dict + * cn_dict = { + * 'pointer': pointer, # <<<<<<<<<<<<<< + * 'id': b'##CN', + * 'length': cn_hdr.length, */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyDict_NewPresized(27); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_pointer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_pointer, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_id, __pyx_kp_b_CN) < 0) __PYX_ERR(0, 391, __pyx_L1_error) - /* "dataRead.pyx":244 - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, - * 0 if byteorder == 'little' else 1) # <<<<<<<<<<<<<< - * else: - * return read_byte(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":393 + * 'pointer': pointer, + * 'id': b'##CN', + * 'length': cn_hdr.length, # <<<<<<<<<<<<<< + * 'link_count': cn_hdr.link_count, + * 'cn_cn_next': cn_hdr.cn_cn_next, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - __pyx_t_6 = 0; - } else { - __pyx_t_6 = 1; - } + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.length); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_length, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":242 - * 0 if byteorder == 'little' else 1) - * elif n_bytes <= 8: - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, - * 0 if byteorder == 'little' else 1) + /* "dataRead.pyx":394 + * 'id': b'##CN', + * 'length': cn_hdr.length, + * 'link_count': cn_hdr.link_count, # <<<<<<<<<<<<<< + * 'cn_cn_next': cn_hdr.cn_cn_next, + * 'cn_composition': cn_hdr.cn_composition, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.link_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_link_count, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":241 - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, - * 0 if byteorder == 'little' else 1) - * elif n_bytes <= 8: # <<<<<<<<<<<<<< - * return read_unsigned_longlong(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + /* "dataRead.pyx":395 + * 'length': cn_hdr.length, + * 'link_count': cn_hdr.link_count, + * 'cn_cn_next': cn_hdr.cn_cn_next, # <<<<<<<<<<<<<< + * 'cn_composition': cn_hdr.cn_composition, + * 'cn_tx_name': cn_hdr.cn_tx_name, */ - } + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_cn_next); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_cn_next, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":246 - * 0 if byteorder == 'little' else 1) - * else: - * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * else: # array + /* "dataRead.pyx":396 + * 'link_count': cn_hdr.link_count, + * 'cn_cn_next': cn_hdr.cn_cn_next, + * 'cn_composition': cn_hdr.cn_composition, # <<<<<<<<<<<<<< + * 'cn_tx_name': cn_hdr.cn_tx_name, + * 'cn_si_source': cn_hdr.cn_si_source, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_composition); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_composition, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":247 - * else: - * return read_byte(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< - * else: # array - * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ + /* "dataRead.pyx":397 + * 'cn_cn_next': cn_hdr.cn_cn_next, + * 'cn_composition': cn_hdr.cn_composition, + * 'cn_tx_name': cn_hdr.cn_tx_name, # <<<<<<<<<<<<<< + * 'cn_si_source': cn_hdr.cn_si_source, + * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, */ - __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - __pyx_L4:; + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_tx_name, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":139 - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * if not array: # <<<<<<<<<<<<<< - * if 'V' in record_format or 'S' in record_format or record_format is None: - * return read_byte(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":398 + * 'cn_composition': cn_hdr.cn_composition, + * 'cn_tx_name': cn_hdr.cn_tx_name, + * 'cn_si_source': cn_hdr.cn_si_source, # <<<<<<<<<<<<<< + * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, + * 'cn_data': cn_hdr.cn_data, */ - goto __pyx_L3; - } + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_si_source); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_si_source, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":249 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * else: # array - * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type in (1, 3, 5)): - * return read_array(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":399 + * 'cn_tx_name': cn_hdr.cn_tx_name, + * 'cn_si_source': cn_hdr.cn_si_source, + * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, # <<<<<<<<<<<<<< + * 'cn_data': cn_hdr.cn_data, + * 'cn_md_unit': cn_hdr.cn_md_unit, */ - /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 249, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 249, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (!__pyx_t_3) { - goto __pyx_L82_next_or; - } else { - } - switch (__pyx_v_signal_data_type) { - case 0: - case 2: - case 4: - __pyx_t_3 = 1; - break; - default: - __pyx_t_3 = 0; - break; - } - __pyx_t_2 = __pyx_t_3; - if (!__pyx_t_2) { - } else { - __pyx_t_5 = __pyx_t_2; - goto __pyx_L81_bool_binop_done; - } - __pyx_L82_next_or:; + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_cc_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 399, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_cc_conversion, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":250 - * else: # array - * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ - * (byteorder == 'big' and signal_data_type in (1, 3, 5)): # <<<<<<<<<<<<<< - * return read_array(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) + /* "dataRead.pyx":400 + * 'cn_si_source': cn_hdr.cn_si_source, + * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, + * 'cn_data': cn_hdr.cn_data, # <<<<<<<<<<<<<< + * 'cn_md_unit': cn_hdr.cn_md_unit, + * 'cn_md_comment': cn_hdr.cn_md_comment, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 250, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 250, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { - } else { - __pyx_t_5 = __pyx_t_2; - goto __pyx_L81_bool_binop_done; - } - switch (__pyx_v_signal_data_type) { - case 1: - case 3: - case 5: - __pyx_t_2 = 1; - break; - default: - __pyx_t_2 = 0; - break; - } - __pyx_t_3 = __pyx_t_2; - __pyx_t_5 = __pyx_t_3; - __pyx_L81_bool_binop_done:; + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 400, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_data, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":249 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * else: # array - * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type in (1, 3, 5)): - * return read_array(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":401 + * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, + * 'cn_data': cn_hdr.cn_data, + * 'cn_md_unit': cn_hdr.cn_md_unit, # <<<<<<<<<<<<<< + * 'cn_md_comment': cn_hdr.cn_md_comment, + * 'cn_type': cn_dat.cn_type, */ - if (__pyx_t_5) { + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_md_unit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 401, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_md_unit, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":251 - * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ - * (byteorder == 'big' and signal_data_type in (1, 3, 5)): - * return read_array(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) - * else: # swap bytes + /* "dataRead.pyx":402 + * 'cn_data': cn_hdr.cn_data, + * 'cn_md_unit': cn_hdr.cn_md_unit, + * 'cn_md_comment': cn_hdr.cn_md_comment, # <<<<<<<<<<<<<< + * 'cn_type': cn_dat.cn_type, + * 'cn_sync_type': cn_dat.cn_sync_type, */ - __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_md_comment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 402, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_md_comment, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":252 - * (byteorder == 'big' and signal_data_type in (1, 3, 5)): - * return read_array(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< - * else: # swap bytes - * return read_array(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":403 + * 'cn_md_unit': cn_hdr.cn_md_unit, + * 'cn_md_comment': cn_hdr.cn_md_comment, + * 'cn_type': cn_dat.cn_type, # <<<<<<<<<<<<<< + * 'cn_sync_type': cn_dat.cn_sync_type, + * 'cn_data_type': cn_dat.cn_data_type, */ - __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 251, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_type, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":249 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) - * else: # array - * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< - * (byteorder == 'big' and signal_data_type in (1, 3, 5)): - * return read_array(bit_stream, record_format, number_of_records, + /* "dataRead.pyx":404 + * 'cn_md_comment': cn_hdr.cn_md_comment, + * 'cn_type': cn_dat.cn_type, + * 'cn_sync_type': cn_dat.cn_sync_type, # <<<<<<<<<<<<<< + * 'cn_data_type': cn_dat.cn_data_type, + * 'cn_bit_offset': cn_dat.cn_bit_offset, */ - } + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_sync_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_sync_type, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":254 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) - * else: # swap bytes - * return read_array(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) - * + /* "dataRead.pyx":405 + * 'cn_type': cn_dat.cn_type, + * 'cn_sync_type': cn_dat.cn_sync_type, + * 'cn_data_type': cn_dat.cn_data_type, # <<<<<<<<<<<<<< + * 'cn_bit_offset': cn_dat.cn_bit_offset, + * 'cn_byte_offset': cn_dat.cn_byte_offset, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_data_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_data_type, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":255 - * else: # swap bytes - * return read_array(bit_stream, record_format, number_of_records, - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< - * - * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, + /* "dataRead.pyx":406 + * 'cn_sync_type': cn_dat.cn_sync_type, + * 'cn_data_type': cn_dat.cn_data_type, + * 'cn_bit_offset': cn_dat.cn_bit_offset, # <<<<<<<<<<<<<< + * 'cn_byte_offset': cn_dat.cn_byte_offset, + * 'cn_bit_count': cn_dat.cn_bit_count, */ - __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 254, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - } - __pyx_L3:; + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_bit_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_bit_offset, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":101 - * - * - * @cython.boundscheck(False) # <<<<<<<<<<<<<< - * @cython.wraparound(False) - * def sorted_data_read(bytes tmp, unsigned short bit_count, + /* "dataRead.pyx":407 + * 'cn_data_type': cn_dat.cn_data_type, + * 'cn_bit_offset': cn_dat.cn_bit_offset, + * 'cn_byte_offset': cn_dat.cn_byte_offset, # <<<<<<<<<<<<<< + * 'cn_bit_count': cn_dat.cn_bit_count, + * 'cn_flags': cn_dat.cn_flags, */ + __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_byte_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_byte_offset, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("dataRead.sorted_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":257 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) - * - * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) + /* "dataRead.pyx":408 + * 'cn_bit_offset': cn_dat.cn_bit_offset, + * 'cn_byte_offset': cn_dat.cn_byte_offset, + * 'cn_bit_count': cn_dat.cn_bit_count, # <<<<<<<<<<<<<< + * 'cn_flags': cn_dat.cn_flags, + * 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, */ + __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_bit_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_bit_count, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_bit_stream, CYTHON_UNUSED PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { - __Pyx_memviewslice __pyx_v_buf = { 0, 0, { 0 }, { 0 }, { 0 } }; - unsigned PY_LONG_LONG __pyx_v_i; - uint16_t __pyx_v_temp_uint16; - 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; - PyObject *__pyx_t_5 = NULL; - __Pyx_memviewslice __pyx_t_6 = { 0, 0, { 0 }, { 0 }, { 0 } }; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - int __pyx_t_11; - unsigned int __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_half", 1); + /* "dataRead.pyx":409 + * 'cn_byte_offset': cn_dat.cn_byte_offset, + * 'cn_bit_count': cn_dat.cn_bit_count, + * 'cn_flags': cn_dat.cn_flags, # <<<<<<<<<<<<<< + * 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, + * 'cn_precision': cn_dat.cn_precision, + */ + __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 409, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_flags, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":259 - * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing + /* "dataRead.pyx":410 + * 'cn_bit_count': cn_dat.cn_bit_count, + * 'cn_flags': cn_dat.cn_flags, + * 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, # <<<<<<<<<<<<<< + * 'cn_precision': cn_dat.cn_precision, + * 'cn_reserved': 0, */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_uint16_t(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 259, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_buf = __pyx_t_6; - __pyx_t_6.memview = NULL; - __pyx_t_6.data = NULL; + __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_invalid_bit_pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_invalid_bit_pos, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":261 - * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) - * cdef unsigned long long i - * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - */ - __pyx_v_temp_uint16 = 0; - - /* "dataRead.pyx":262 - * cdef unsigned long long i - * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp_uint16 - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":263 - * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing - * for i in range(number_of_records): - * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * buf[i] = temp_uint16 - * if swap == 0: + /* "dataRead.pyx":411 + * 'cn_flags': cn_dat.cn_flags, + * 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, + * 'cn_precision': cn_dat.cn_precision, # <<<<<<<<<<<<<< + * 'cn_reserved': 0, + * 'cn_attachment_count': cn_dat.cn_attachment_count, */ - (void)(memcpy((&__pyx_v_temp_uint16), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_precision); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_precision, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_reserved, __pyx_int_0) < 0) __PYX_ERR(0, 391, __pyx_L1_error) - /* "dataRead.pyx":264 - * for i in range(number_of_records): - * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp_uint16 # <<<<<<<<<<<<<< - * if swap == 0: - * return np.asarray(buf).view(dtype=np.float16) + /* "dataRead.pyx":413 + * 'cn_precision': cn_dat.cn_precision, + * 'cn_reserved': 0, + * 'cn_attachment_count': cn_dat.cn_attachment_count, # <<<<<<<<<<<<<< + * 'cn_val_range_min': cn_dat.cn_val_range_min, + * 'cn_val_range_max': cn_dat.cn_val_range_max, */ - __pyx_t_10 = __pyx_v_i; - *((uint16_t *) ( /* dim=0 */ (__pyx_v_buf.data + __pyx_t_10 * __pyx_v_buf.strides[0]) )) = __pyx_v_temp_uint16; - } + __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cn_dat.cn_attachment_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_attachment_count, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":265 - * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp_uint16 - * if swap == 0: # <<<<<<<<<<<<<< - * return np.asarray(buf).view(dtype=np.float16) - * else: + /* "dataRead.pyx":414 + * 'cn_reserved': 0, + * 'cn_attachment_count': cn_dat.cn_attachment_count, + * 'cn_val_range_min': cn_dat.cn_val_range_min, # <<<<<<<<<<<<<< + * 'cn_val_range_max': cn_dat.cn_val_range_max, + * 'cn_default_x': None, */ - __pyx_t_11 = (__pyx_v_swap == 0); - if (__pyx_t_11) { + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cn_dat.cn_val_range_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 414, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_val_range_min, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":266 - * buf[i] = temp_uint16 - * if swap == 0: - * return np.asarray(buf).view(dtype=np.float16) # <<<<<<<<<<<<<< - * else: - * return np.asarray(buf).view(dtype=np.float16).byteswap() + /* "dataRead.pyx":415 + * 'cn_attachment_count': cn_dat.cn_attachment_count, + * 'cn_val_range_min': cn_dat.cn_val_range_min, + * 'cn_val_range_max': cn_dat.cn_val_range_max, # <<<<<<<<<<<<<< + * 'cn_default_x': None, + * 'name': cn_name, */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = NULL; - __pyx_t_12 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_12 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; - __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error) + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cn_dat.cn_val_range_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 266, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_val_range_max, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - /* "dataRead.pyx":265 - * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp_uint16 - * if swap == 0: # <<<<<<<<<<<<<< - * return np.asarray(buf).view(dtype=np.float16) - * else: + /* "dataRead.pyx":416 + * 'cn_val_range_min': cn_dat.cn_val_range_min, + * 'cn_val_range_max': cn_dat.cn_val_range_max, + * 'cn_default_x': None, # <<<<<<<<<<<<<< + * 'name': cn_name, + * } */ - } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_default_x, Py_None) < 0) __PYX_ERR(0, 391, __pyx_L1_error) - /* "dataRead.pyx":268 - * return np.asarray(buf).view(dtype=np.float16) - * else: - * return np.asarray(buf).view(dtype=np.float16).byteswap() # <<<<<<<<<<<<<< + /* "dataRead.pyx":417 + * 'cn_val_range_max': cn_dat.cn_val_range_max, + * 'cn_default_x': None, + * 'name': cn_name, # <<<<<<<<<<<<<< + * } * - * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - __pyx_t_12 = 0; - #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_12 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; - __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - __pyx_t_12 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_12 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 0+__pyx_t_12); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_name, __pyx_v_cn_name) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_cn_dict, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "dataRead.pyx":257 - * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) + /* "dataRead.pyx":421 * - * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) + * # Handle extra links (attachments, default_x) + * if cn_hdr.link_count > 8: # <<<<<<<<<<<<<< + * n_extra = ((cn_hdr.link_count) - 8) * 8 + * if n_extra <= 512: */ + __pyx_t_6 = (__pyx_v_cn_hdr.link_count > 8); + if (__pyx_t_6) { - /* 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_5); - __PYX_XCLEAR_MEMVIEW(&__pyx_t_6, 1); - __Pyx_AddTraceback("dataRead.read_half", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __PYX_XCLEAR_MEMVIEW(&__pyx_v_buf, 1); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":270 - * return np.asarray(buf).view(dtype=np.float16).byteswap() - * - * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * # complex32 = real(f16) + imag(f16): return as (n_records, 2) float16 array + /* "dataRead.pyx":422 + * # Handle extra links (attachments, default_x) + * if cn_hdr.link_count > 8: + * n_extra = ((cn_hdr.link_count) - 8) * 8 # <<<<<<<<<<<<<< + * if n_extra <= 512: + * with nogil: */ + __pyx_v_n_extra = ((((Py_ssize_t)__pyx_v_cn_hdr.link_count) - 8) * 8); -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_bit_stream, CYTHON_UNUSED PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyObject *__pyx_t_5 = NULL; - PyArrayObject *__pyx_t_6 = NULL; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - Py_ssize_t __pyx_t_11; - int __pyx_t_12; - unsigned int __pyx_t_13; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_chalf", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + /* "dataRead.pyx":423 + * if cn_hdr.link_count > 8: + * n_extra = ((cn_hdr.link_count) - 8) * 8 + * if n_extra <= 512: # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) + */ + __pyx_t_6 = (__pyx_v_n_extra <= 0x200); + if (__pyx_t_6) { - /* "dataRead.pyx":273 - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * # complex32 = real(f16) + imag(f16): return as (n_records, 2) float16 array - * cdef np.ndarray[np.uint16_t, ndim=2] buf = np.empty((number_of_records, 2), dtype=np.uint16) # <<<<<<<<<<<<<< - * cdef unsigned long long i - * for i in range(number_of_records): + /* "dataRead.pyx":424 + * n_extra = ((cn_hdr.link_count) - 8) * 8 + * if n_extra <= 512: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) + * if nread == n_extra: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error); - __Pyx_INCREF(__pyx_int_2); - __Pyx_GIVEREF(__pyx_int_2); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2)) __PYX_ERR(0, 273, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 273, __pyx_L1_error) - __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 273, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_buf.diminfo[1].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_buf.diminfo[1].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[1]; - } - } - __pyx_t_6 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_5); - __pyx_t_5 = 0; + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":275 - * cdef np.ndarray[np.uint16_t, ndim=2] buf = np.empty((number_of_records, 2), dtype=np.uint16) - * cdef unsigned long long i - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) + /* "dataRead.pyx":425 + * if n_extra <= 512: + * with nogil: + * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) # <<<<<<<<<<<<<< + * if nread == n_extra: + * extra_links = [] */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_v_nread = pread(__pyx_v_fd, __pyx_v_extra_buf, __pyx_v_n_extra, (__pyx_v_pointer + 88)); + } - /* "dataRead.pyx":276 - * cdef unsigned long long i - * for i in range(number_of_records): - * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) - * if swap == 0: + /* "dataRead.pyx":424 + * n_extra = ((cn_hdr.link_count) - 8) * 8 + * if n_extra <= 512: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) + * if nread == n_extra: + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L24; + } + __pyx_L24:; + } + } + + /* "dataRead.pyx":426 + * with nogil: + * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) + * if nread == n_extra: # <<<<<<<<<<<<<< + * extra_links = [] + * for i in range(0, n_extra, 8): */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 0; - if (__pyx_t_11 < 0) __pyx_t_11 += __pyx_pybuffernd_buf.diminfo[1].shape; - (void)(memcpy((&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_buf.diminfo[1].strides))), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + __pyx_t_6 = (__pyx_v_nread == __pyx_v_n_extra); + if (__pyx_t_6) { - /* "dataRead.pyx":277 - * for i in range(number_of_records): - * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) # <<<<<<<<<<<<<< - * if swap == 0: - * return buf.view(dtype=np.float16) + /* "dataRead.pyx":427 + * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) + * if nread == n_extra: + * extra_links = [] # <<<<<<<<<<<<<< + * for i in range(0, n_extra, 8): + * lnk = 0 */ - __pyx_t_10 = __pyx_v_i; - __pyx_t_11 = 1; - if (__pyx_t_11 < 0) __pyx_t_11 += __pyx_pybuffernd_buf.diminfo[1].shape; - (void)(memcpy((&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_buf.diminfo[1].strides))), (&(__pyx_v_bit_stream[((__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)) + 2)])), 2)); - } + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_extra_links, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "dataRead.pyx":428 + * if nread == n_extra: + * extra_links = [] + * for i in range(0, n_extra, 8): # <<<<<<<<<<<<<< + * lnk = 0 + * memcpy(&lnk, extra_buf + i, 8) + */ + __pyx_t_7 = __pyx_v_n_extra; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=8) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":429 + * extra_links = [] + * for i in range(0, n_extra, 8): + * lnk = 0 # <<<<<<<<<<<<<< + * memcpy(&lnk, extra_buf + i, 8) + * extra_links.append(lnk) + */ + __pyx_v_lnk = 0; + + /* "dataRead.pyx":430 + * for i in range(0, n_extra, 8): + * lnk = 0 + * memcpy(&lnk, extra_buf + i, 8) # <<<<<<<<<<<<<< + * extra_links.append(lnk) + * if cn_dat.cn_attachment_count > 0: + */ + (void)(memcpy((&__pyx_v_lnk), (__pyx_v_extra_buf + __pyx_v_i), 8)); + + /* "dataRead.pyx":431 + * lnk = 0 + * memcpy(&lnk, extra_buf + i, 8) + * extra_links.append(lnk) # <<<<<<<<<<<<<< + * if cn_dat.cn_attachment_count > 0: + * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] + */ + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_lnk); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_extra_links, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 431, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } - /* "dataRead.pyx":278 - * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) - * if swap == 0: # <<<<<<<<<<<<<< - * return buf.view(dtype=np.float16) - * else: + /* "dataRead.pyx":432 + * memcpy(&lnk, extra_buf + i, 8) + * extra_links.append(lnk) + * if cn_dat.cn_attachment_count > 0: # <<<<<<<<<<<<<< + * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] + * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: + */ + __pyx_t_6 = (__pyx_v_cn_dat.cn_attachment_count > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":433 + * extra_links.append(lnk) + * if cn_dat.cn_attachment_count > 0: + * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] # <<<<<<<<<<<<<< + * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: + * cn_dict['cn_default_x'] = extra_links[cn_dat.cn_attachment_count:] + */ + __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_extra_links, 0, __pyx_v_cn_dat.cn_attachment_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_cn_at_reference, __pyx_t_1) < 0))) __PYX_ERR(0, 433, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dataRead.pyx":432 + * memcpy(&lnk, extra_buf + i, 8) + * extra_links.append(lnk) + * if cn_dat.cn_attachment_count > 0: # <<<<<<<<<<<<<< + * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] + * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: */ - __pyx_t_12 = (__pyx_v_swap == 0); - if (__pyx_t_12) { + } - /* "dataRead.pyx":279 - * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) - * if swap == 0: - * return buf.view(dtype=np.float16) # <<<<<<<<<<<<<< - * else: - * return buf.view(dtype=np.float16).byteswap() + /* "dataRead.pyx":434 + * if cn_dat.cn_attachment_count > 0: + * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] + * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: # <<<<<<<<<<<<<< + * cn_dict['cn_default_x'] = extra_links[cn_dat.cn_attachment_count:] + * */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; + __pyx_t_6 = (__pyx_v_cn_hdr.link_count > (8 + __pyx_v_cn_dat.cn_attachment_count)); + if (__pyx_t_6) { - /* "dataRead.pyx":278 - * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) - * if swap == 0: # <<<<<<<<<<<<<< - * return buf.view(dtype=np.float16) - * else: + /* "dataRead.pyx":435 + * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] + * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: + * cn_dict['cn_default_x'] = extra_links[cn_dat.cn_attachment_count:] # <<<<<<<<<<<<<< + * + * # Read unit (TX or MD block) */ - } + __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_extra_links, __pyx_v_cn_dat.cn_attachment_count, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_cn_default_x, __pyx_t_1) < 0))) __PYX_ERR(0, 435, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":281 - * return buf.view(dtype=np.float16) - * else: - * return buf.view(dtype=np.float16).byteswap() # <<<<<<<<<<<<<< + /* "dataRead.pyx":434 + * if cn_dat.cn_attachment_count > 0: + * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] + * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: # <<<<<<<<<<<<<< + * cn_dict['cn_default_x'] = extra_links[cn_dat.cn_attachment_count:] * - * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - __pyx_t_13 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_13 = 1; + } + + /* "dataRead.pyx":426 + * with nogil: + * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) + * if nread == n_extra: # <<<<<<<<<<<<<< + * extra_links = [] + * for i in range(0, n_extra, 8): + */ + } + + /* "dataRead.pyx":423 + * if cn_hdr.link_count > 8: + * n_extra = ((cn_hdr.link_count) - 8) * 8 + * if n_extra <= 512: # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) + */ } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_13, 0+__pyx_t_13); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 281, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } - /* "dataRead.pyx":270 - * return np.asarray(buf).view(dtype=np.float16).byteswap() + /* "dataRead.pyx":421 * - * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * # complex32 = real(f16) + imag(f16): return as (n_records, 2) float16 array + * # Handle extra links (attachments, default_x) + * if cn_hdr.link_count > 8: # <<<<<<<<<<<<<< + * n_extra = ((cn_hdr.link_count) - 8) * 8 + * if n_extra <= 512: */ + } - /* 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_5); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_chalf", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":283 - * return buf.view(dtype=np.float16).byteswap() + /* "dataRead.pyx":438 * - * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * # Read unit (TX or MD block) + * if not channel_name_list: # <<<<<<<<<<<<<< + * if cn_hdr.cn_md_unit: + * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) */ + __pyx_t_6 = (!__pyx_v_channel_name_list); + if (__pyx_t_6) { -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - float __pyx_v_temp_float; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - unsigned PY_LONG_LONG __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - int __pyx_t_10; - unsigned int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_float", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + /* "dataRead.pyx":439 + * # Read unit (TX or MD block) + * if not channel_name_list: + * if cn_hdr.cn_md_unit: # <<<<<<<<<<<<<< + * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) + * if unit_str: + */ + __pyx_t_6 = (__pyx_v_cn_hdr.cn_md_unit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":285 - * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef float temp_float = 0 + /* "dataRead.pyx":440 + * if not channel_name_list: + * if cn_hdr.cn_md_unit: + * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) # <<<<<<<<<<<<<< + * if unit_str: + * cn_dict['unit'] = unit_str */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 285, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 285, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 285, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 285, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 285, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 285, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 285, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; - } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_1 = __pyx_f_8dataRead__fast_read_tx_or_md(__pyx_v_fd, __pyx_v_cn_hdr.cn_md_unit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_unit_str, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "dataRead.pyx":287 - * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef float temp_float = 0 # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + /* "dataRead.pyx":441 + * if cn_hdr.cn_md_unit: + * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) + * if unit_str: # <<<<<<<<<<<<<< + * cn_dict['unit'] = unit_str + * elif cn_dat.cn_sync_type == 1: */ - __pyx_v_temp_float = 0.0; + __pyx_t_6 = (__pyx_v_unit_str != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_unit_str) != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":288 - * cdef unsigned long long i - * cdef float temp_float = 0 - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp_float + /* "dataRead.pyx":442 + * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) + * if unit_str: + * cn_dict['unit'] = unit_str # <<<<<<<<<<<<<< + * elif cn_dat.cn_sync_type == 1: + * cn_dict['unit'] = 's' */ - __pyx_t_6 = __pyx_v_number_of_records; - __pyx_t_7 = __pyx_t_6; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { - __pyx_v_i = __pyx_t_8; + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_v_unit_str) < 0))) __PYX_ERR(0, 442, __pyx_L1_error) - /* "dataRead.pyx":289 - * cdef float temp_float = 0 - * for i in range(number_of_records): - * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< - * buf[i] = temp_float - * if swap == 0: + /* "dataRead.pyx":441 + * if cn_hdr.cn_md_unit: + * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) + * if unit_str: # <<<<<<<<<<<<<< + * cn_dict['unit'] = unit_str + * elif cn_dat.cn_sync_type == 1: */ - (void)(memcpy((&__pyx_v_temp_float), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); + goto __pyx_L32; + } - /* "dataRead.pyx":290 - * for i in range(number_of_records): - * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp_float # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":443 + * if unit_str: + * cn_dict['unit'] = unit_str + * elif cn_dat.cn_sync_type == 1: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: */ - __pyx_t_9 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_float; - } + __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 1); + if (__pyx_t_6) { - /* "dataRead.pyx":291 - * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp_float - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":444 + * cn_dict['unit'] = unit_str + * elif cn_dat.cn_sync_type == 1: + * cn_dict['unit'] = 's' # <<<<<<<<<<<<<< + * elif cn_dat.cn_sync_type == 2: + * cn_dict['unit'] = 'rad' */ - __pyx_t_10 = (__pyx_v_swap == 0); - if (__pyx_t_10) { + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_s) < 0))) __PYX_ERR(0, 444, __pyx_L1_error) - /* "dataRead.pyx":292 - * buf[i] = temp_float - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":443 + * if unit_str: + * cn_dict['unit'] = unit_str + * elif cn_dat.cn_sync_type == 1: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + goto __pyx_L32; + } - /* "dataRead.pyx":291 - * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp_float - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":445 + * elif cn_dat.cn_sync_type == 1: + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: */ - } + __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 2); + if (__pyx_t_6) { - /* "dataRead.pyx":294 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * - * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, + /* "dataRead.pyx":446 + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: + * cn_dict['unit'] = 'rad' # <<<<<<<<<<<<<< + * elif cn_dat.cn_sync_type == 3: + * cn_dict['unit'] = 'm' */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 294, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_rad) < 0))) __PYX_ERR(0, 446, __pyx_L1_error) - /* "dataRead.pyx":283 - * return buf.view(dtype=np.float16).byteswap() - * - * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":445 + * elif cn_dat.cn_sync_type == 1: + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: */ + goto __pyx_L32; + } - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_float", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":447 + * elif cn_dat.cn_sync_type == 2: + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 'm' + * elif cn_dat.cn_sync_type == 1: + */ + __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 3); + if (__pyx_t_6) { -/* "dataRead.pyx":296 - * return buf.byteswap() - * - * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":448 + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: + * cn_dict['unit'] = 'm' # <<<<<<<<<<<<<< + * elif cn_dat.cn_sync_type == 1: + * cn_dict['unit'] = 's' */ + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_m) < 0))) __PYX_ERR(0, 448, __pyx_L1_error) -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - __pyx_t_float_complex __pyx_v_temp_cfloat; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - unsigned PY_LONG_LONG __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - int __pyx_t_10; - unsigned int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_cfloat", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + /* "dataRead.pyx":447 + * elif cn_dat.cn_sync_type == 2: + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 'm' + * elif cn_dat.cn_sync_type == 1: + */ + } + __pyx_L32:; - /* "dataRead.pyx":298 - * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef float complex temp_cfloat = 0 + /* "dataRead.pyx":439 + * # Read unit (TX or MD block) + * if not channel_name_list: + * if cn_hdr.cn_md_unit: # <<<<<<<<<<<<<< + * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) + * if unit_str: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 298, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 298, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 298, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo___pyx_t_float_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 298, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; - } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + goto __pyx_L31; + } - /* "dataRead.pyx":300 - * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef float complex temp_cfloat = 0 # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + /* "dataRead.pyx":449 + * elif cn_dat.cn_sync_type == 3: + * cn_dict['unit'] = 'm' + * elif cn_dat.cn_sync_type == 1: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: */ - __pyx_v_temp_cfloat = __pyx_t_float_complex_from_parts(0, 0); + __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 1); + if (__pyx_t_6) { - /* "dataRead.pyx":301 - * cdef unsigned long long i - * cdef float complex temp_cfloat = 0 - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) - * buf[i] = temp_cfloat + /* "dataRead.pyx":450 + * cn_dict['unit'] = 'm' + * elif cn_dat.cn_sync_type == 1: + * cn_dict['unit'] = 's' # <<<<<<<<<<<<<< + * elif cn_dat.cn_sync_type == 2: + * cn_dict['unit'] = 'rad' */ - __pyx_t_6 = __pyx_v_number_of_records; - __pyx_t_7 = __pyx_t_6; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { - __pyx_v_i = __pyx_t_8; + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_s) < 0))) __PYX_ERR(0, 450, __pyx_L1_error) - /* "dataRead.pyx":302 - * cdef float complex temp_cfloat = 0 - * for i in range(number_of_records): - * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) # <<<<<<<<<<<<<< - * buf[i] = temp_cfloat - * if swap == 0: + /* "dataRead.pyx":449 + * elif cn_dat.cn_sync_type == 3: + * cn_dict['unit'] = 'm' + * elif cn_dat.cn_sync_type == 1: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: */ - (void)(memcpy((&__pyx_v_temp_cfloat), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 8)); + goto __pyx_L31; + } - /* "dataRead.pyx":303 - * for i in range(number_of_records): - * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) - * buf[i] = temp_cfloat # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":451 + * elif cn_dat.cn_sync_type == 1: + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: */ - __pyx_t_9 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_float_complex *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_cfloat; - } + __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 2); + if (__pyx_t_6) { - /* "dataRead.pyx":304 - * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) - * buf[i] = temp_cfloat - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":452 + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: + * cn_dict['unit'] = 'rad' # <<<<<<<<<<<<<< + * elif cn_dat.cn_sync_type == 3: + * cn_dict['unit'] = 'm' */ - __pyx_t_10 = (__pyx_v_swap == 0); - if (__pyx_t_10) { + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_rad) < 0))) __PYX_ERR(0, 452, __pyx_L1_error) - /* "dataRead.pyx":305 - * buf[i] = temp_cfloat - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":451 + * elif cn_dat.cn_sync_type == 1: + * cn_dict['unit'] = 's' + * elif cn_dat.cn_sync_type == 2: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + goto __pyx_L31; + } - /* "dataRead.pyx":304 - * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) - * buf[i] = temp_cfloat - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":453 + * elif cn_dat.cn_sync_type == 2: + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 'm' + * */ - } + __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 3); + if (__pyx_t_6) { - /* "dataRead.pyx":307 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< + /* "dataRead.pyx":454 + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: + * cn_dict['unit'] = 'm' # <<<<<<<<<<<<<< + * + * # Read description (MD/TX block) + */ + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_m) < 0))) __PYX_ERR(0, 454, __pyx_L1_error) + + /* "dataRead.pyx":453 + * elif cn_dat.cn_sync_type == 2: + * cn_dict['unit'] = 'rad' + * elif cn_dat.cn_sync_type == 3: # <<<<<<<<<<<<<< + * cn_dict['unit'] = 'm' * - * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 307, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __pyx_L31:; - /* "dataRead.pyx":296 - * return buf.byteswap() + /* "dataRead.pyx":457 * - * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * # Read description (MD/TX block) + * if cn_hdr.cn_md_comment: # <<<<<<<<<<<<<< + * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) + * if desc_str: */ + __pyx_t_6 = (__pyx_v_cn_hdr.cn_md_comment != 0); + if (__pyx_t_6) { - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_cfloat", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":458 + * # Read description (MD/TX block) + * if cn_hdr.cn_md_comment: + * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) # <<<<<<<<<<<<<< + * if desc_str: + * cn_dict['Comment'] = {'description': desc_str} + */ + __pyx_t_1 = __pyx_f_8dataRead__fast_read_tx_or_md(__pyx_v_fd, __pyx_v_cn_hdr.cn_md_comment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 458, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_desc_str, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; -/* "dataRead.pyx":309 - * return buf.byteswap() + /* "dataRead.pyx":459 + * if cn_hdr.cn_md_comment: + * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) + * if desc_str: # <<<<<<<<<<<<<< + * cn_dict['Comment'] = {'description': desc_str} * - * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ + __pyx_t_6 = (__pyx_v_desc_str != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_desc_str) != 0); + if (__pyx_t_6) { -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - double __pyx_v_temp_double; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - unsigned PY_LONG_LONG __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - int __pyx_t_10; - unsigned int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_double", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + /* "dataRead.pyx":460 + * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) + * if desc_str: + * cn_dict['Comment'] = {'description': desc_str} # <<<<<<<<<<<<<< + * + * # Read CC block + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_description, __pyx_v_desc_str) < 0) __PYX_ERR(0, 460, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_Comment, __pyx_t_1) < 0))) __PYX_ERR(0, 460, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":311 - * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef double temp_double = 0 + /* "dataRead.pyx":459 + * if cn_hdr.cn_md_comment: + * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) + * if desc_str: # <<<<<<<<<<<<<< + * cn_dict['Comment'] = {'description': desc_str} + * + */ + } + + /* "dataRead.pyx":457 + * + * # Read description (MD/TX block) + * if cn_hdr.cn_md_comment: # <<<<<<<<<<<<<< + * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) + * if desc_str: + */ + } + + /* "dataRead.pyx":438 + * + * # Read unit (TX or MD block) + * if not channel_name_list: # <<<<<<<<<<<<<< + * if cn_hdr.cn_md_unit: + * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 311, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 311, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 311, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; - /* "dataRead.pyx":313 - * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef double temp_double = 0 # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + /* "dataRead.pyx":463 + * + * # Read CC block + * cc_ptr = cn_hdr.cn_cc_conversion # <<<<<<<<<<<<<< + * cc_dict = {'cc_type': 0} + * if cc_ptr != 0: */ - __pyx_v_temp_double = 0.0; + __pyx_t_11 = __pyx_v_cn_hdr.cn_cc_conversion; + __pyx_v_cc_ptr = __pyx_t_11; - /* "dataRead.pyx":314 - * cdef unsigned long long i - * cdef double temp_double = 0 - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) - * buf[i] = temp_double + /* "dataRead.pyx":464 + * # Read CC block + * cc_ptr = cn_hdr.cn_cc_conversion + * cc_dict = {'cc_type': 0} # <<<<<<<<<<<<<< + * if cc_ptr != 0: + * with nogil: */ - __pyx_t_6 = __pyx_v_number_of_records; - __pyx_t_7 = __pyx_t_6; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { - __pyx_v_i = __pyx_t_8; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_type, __pyx_int_0) < 0) __PYX_ERR(0, 464, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_cc_dict, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; - /* "dataRead.pyx":315 - * cdef double temp_double = 0 - * for i in range(number_of_records): - * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) # <<<<<<<<<<<<<< - * buf[i] = temp_double - * if swap == 0: + /* "dataRead.pyx":465 + * cc_ptr = cn_hdr.cn_cc_conversion + * cc_dict = {'cc_type': 0} + * if cc_ptr != 0: # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) */ - (void)(memcpy((&__pyx_v_temp_double), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 8)); + __pyx_t_6 = (__pyx_v_cc_ptr != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":316 - * for i in range(number_of_records): - * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) - * buf[i] = temp_double # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":466 + * cc_dict = {'cc_type': 0} + * if cc_ptr != 0: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) + * if nread == 56: */ - __pyx_t_9 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_double; - } + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":317 - * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) - * buf[i] = temp_double - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":467 + * if cc_ptr != 0: + * with nogil: + * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) # <<<<<<<<<<<<<< + * if nread == 56: + * cc_data_offset = 24 + (cc_hdr.link_count) * 8 */ - __pyx_t_10 = (__pyx_v_swap == 0); - if (__pyx_t_10) { + __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_cc_hdr), 56, __pyx_v_cc_ptr); + } - /* "dataRead.pyx":318 - * buf[i] = temp_double - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":466 + * cc_dict = {'cc_type': 0} + * if cc_ptr != 0: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) + * if nread == 56: + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L40; + } + __pyx_L40:; + } + } + + /* "dataRead.pyx":468 + * with nogil: + * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) + * if nread == 56: # <<<<<<<<<<<<<< + * cc_data_offset = 24 + (cc_hdr.link_count) * 8 + * with nogil: */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __pyx_t_6 = (__pyx_v_nread == 56); + if (__pyx_t_6) { - /* "dataRead.pyx":317 - * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) - * buf[i] = temp_double - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":469 + * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) + * if nread == 56: + * cc_data_offset = 24 + (cc_hdr.link_count) * 8 # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) */ - } + __pyx_v_cc_data_offset = (24 + (((Py_ssize_t)__pyx_v_cc_hdr.link_count) * 8)); - /* "dataRead.pyx":320 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * - * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, + /* "dataRead.pyx":470 + * if nread == 56: + * cc_data_offset = 24 + (cc_hdr.link_count) * 8 + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) + * if nread == 24: */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 320, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":309 - * return buf.byteswap() - * - * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":471 + * cc_data_offset = 24 + (cc_hdr.link_count) * 8 + * with nogil: + * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) # <<<<<<<<<<<<<< + * if nread == 24: + * cc_dict = { */ + __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_cc_dat), 24, (__pyx_v_cc_ptr + __pyx_v_cc_data_offset)); + } - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_double", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":470 + * if nread == 56: + * cc_data_offset = 24 + (cc_hdr.link_count) * 8 + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) + * if nread == 24: + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L46; + } + __pyx_L46:; + } + } -/* "dataRead.pyx":322 - * return buf.byteswap() - * - * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":472 + * with nogil: + * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) + * if nread == 24: # <<<<<<<<<<<<<< + * cc_dict = { + * 'pointer': cc_ptr, */ + __pyx_t_6 = (__pyx_v_nread == 24); + if (__pyx_t_6) { -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - __pyx_t_double_complex __pyx_v_temp_cdouble; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - unsigned PY_LONG_LONG __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - int __pyx_t_10; - unsigned int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_cdouble", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + /* "dataRead.pyx":474 + * if nread == 24: + * cc_dict = { + * 'pointer': cc_ptr, # <<<<<<<<<<<<<< + * 'id': b'##CC', + * 'length': cc_hdr.length, + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_ptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_pointer, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_id, __pyx_kp_b_CC) < 0) __PYX_ERR(0, 474, __pyx_L1_error) - /* "dataRead.pyx":324 - * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef double complex temp_cdouble = 0 + /* "dataRead.pyx":476 + * 'pointer': cc_ptr, + * 'id': b'##CC', + * 'length': cc_hdr.length, # <<<<<<<<<<<<<< + * 'link_count': cc_hdr.link_count, + * 'cc_tx_name': cc_hdr.cc_tx_name, */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 324, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 324, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 324, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 324, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; - } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.length); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 476, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_length, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":326 - * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef double complex temp_cdouble = 0 # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) + /* "dataRead.pyx":477 + * 'id': b'##CC', + * 'length': cc_hdr.length, + * 'link_count': cc_hdr.link_count, # <<<<<<<<<<<<<< + * 'cc_tx_name': cc_hdr.cc_tx_name, + * 'cc_md_unit': cc_hdr.cc_md_unit, */ - __pyx_v_temp_cdouble = __pyx_t_double_complex_from_parts(0, 0); + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.link_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 477, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_link_count, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":327 - * cdef unsigned long long i - * cdef double complex temp_cdouble = 0 - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) - * buf[i] = temp_cdouble + /* "dataRead.pyx":478 + * 'length': cc_hdr.length, + * 'link_count': cc_hdr.link_count, + * 'cc_tx_name': cc_hdr.cc_tx_name, # <<<<<<<<<<<<<< + * 'cc_md_unit': cc_hdr.cc_md_unit, + * 'cc_md_comment': cc_hdr.cc_md_comment, */ - __pyx_t_6 = __pyx_v_number_of_records; - __pyx_t_7 = __pyx_t_6; - for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { - __pyx_v_i = __pyx_t_8; + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 478, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_tx_name, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":328 - * cdef double complex temp_cdouble = 0 - * for i in range(number_of_records): - * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) # <<<<<<<<<<<<<< - * buf[i] = temp_cdouble - * if swap == 0: + /* "dataRead.pyx":479 + * 'link_count': cc_hdr.link_count, + * 'cc_tx_name': cc_hdr.cc_tx_name, + * 'cc_md_unit': cc_hdr.cc_md_unit, # <<<<<<<<<<<<<< + * 'cc_md_comment': cc_hdr.cc_md_comment, + * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, */ - (void)(memcpy((&__pyx_v_temp_cdouble), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 16)); + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_md_unit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 479, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_md_unit, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":329 - * for i in range(number_of_records): - * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) - * buf[i] = temp_cdouble # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":480 + * 'cc_tx_name': cc_hdr.cc_tx_name, + * 'cc_md_unit': cc_hdr.cc_md_unit, + * 'cc_md_comment': cc_hdr.cc_md_comment, # <<<<<<<<<<<<<< + * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, + * 'cc_type': cc_dat.cc_type, */ - __pyx_t_9 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_cdouble; - } + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_md_comment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 480, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_md_comment, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":330 - * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) - * buf[i] = temp_cdouble - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":481 + * 'cc_md_unit': cc_hdr.cc_md_unit, + * 'cc_md_comment': cc_hdr.cc_md_comment, + * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, # <<<<<<<<<<<<<< + * 'cc_type': cc_dat.cc_type, + * 'cc_precision': cc_dat.cc_precision, */ - __pyx_t_10 = (__pyx_v_swap == 0); - if (__pyx_t_10) { + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_cc_inverse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 481, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_cc_inverse, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":331 - * buf[i] = temp_cdouble - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":482 + * 'cc_md_comment': cc_hdr.cc_md_comment, + * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, + * 'cc_type': cc_dat.cc_type, # <<<<<<<<<<<<<< + * 'cc_precision': cc_dat.cc_precision, + * 'cc_flags': cc_dat.cc_flags, */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cc_dat.cc_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 482, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_type, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":330 - * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) - * buf[i] = temp_cdouble - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":483 + * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, + * 'cc_type': cc_dat.cc_type, + * 'cc_precision': cc_dat.cc_precision, # <<<<<<<<<<<<<< + * 'cc_flags': cc_dat.cc_flags, + * 'cc_ref_count': cc_dat.cc_ref_count, */ - } + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cc_dat.cc_precision); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 483, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_precision, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":333 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * - * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, + /* "dataRead.pyx":484 + * 'cc_type': cc_dat.cc_type, + * 'cc_precision': cc_dat.cc_precision, + * 'cc_flags': cc_dat.cc_flags, # <<<<<<<<<<<<<< + * 'cc_ref_count': cc_dat.cc_ref_count, + * 'cc_val_count': cc_dat.cc_val_count, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 333, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 484, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_flags, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":322 - * return buf.byteswap() - * - * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): - * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":485 + * 'cc_precision': cc_dat.cc_precision, + * 'cc_flags': cc_dat.cc_flags, + * 'cc_ref_count': cc_dat.cc_ref_count, # <<<<<<<<<<<<<< + * 'cc_val_count': cc_dat.cc_val_count, + * 'cc_phy_range_min': cc_dat.cc_phy_range_min, */ + __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_ref_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 485, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_ref_count, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_cdouble", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":486 + * 'cc_flags': cc_dat.cc_flags, + * 'cc_ref_count': cc_dat.cc_ref_count, + * 'cc_val_count': cc_dat.cc_val_count, # <<<<<<<<<<<<<< + * 'cc_phy_range_min': cc_dat.cc_phy_range_min, + * 'cc_phy_range_max': cc_dat.cc_phy_range_max, + */ + __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_val_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_val_count, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -/* "dataRead.pyx":335 - * return buf.byteswap() - * - * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset): + /* "dataRead.pyx":487 + * 'cc_ref_count': cc_dat.cc_ref_count, + * 'cc_val_count': cc_dat.cc_val_count, + * 'cc_phy_range_min': cc_dat.cc_phy_range_min, # <<<<<<<<<<<<<< + * 'cc_phy_range_max': cc_dat.cc_phy_range_max, + * } */ + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cc_dat.cc_phy_range_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_phy_range_min, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned char __pyx_v_mask; - unsigned char __pyx_v_temp1byte; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - int __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_unsigned_char", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + /* "dataRead.pyx":488 + * 'cc_val_count': cc_dat.cc_val_count, + * 'cc_phy_range_min': cc_dat.cc_phy_range_min, + * 'cc_phy_range_max': cc_dat.cc_phy_range_max, # <<<<<<<<<<<<<< + * } + * # Read cc_val (doubles) for common conversion types + */ + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cc_dat.cc_phy_range_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 488, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_phy_range_max, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_cc_dict, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "dataRead.pyx":491 + * } + * # Read cc_val (doubles) for common conversion types + * if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): # <<<<<<<<<<<<<< + * n_bytes = cc_dat.cc_val_count * 8 + * cc_val_buf = PyMem_Malloc(n_bytes) + */ + __pyx_t_12 = (__pyx_v_cc_dat.cc_val_count > 0); + if (__pyx_t_12) { + } else { + __pyx_t_6 = __pyx_t_12; + goto __pyx_L49_bool_binop_done; + } + switch (__pyx_v_cc_dat.cc_type) { + case 3: + case 7: + case 8: + case 9: + case 10: + case 11: + __pyx_t_12 = 0; + break; + default: + __pyx_t_12 = 1; + break; + } + __pyx_t_13 = __pyx_t_12; + __pyx_t_6 = __pyx_t_13; + __pyx_L49_bool_binop_done:; + if (__pyx_t_6) { + + /* "dataRead.pyx":492 + * # Read cc_val (doubles) for common conversion types + * if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): + * n_bytes = cc_dat.cc_val_count * 8 # <<<<<<<<<<<<<< + * cc_val_buf = PyMem_Malloc(n_bytes) + * if cc_val_buf != NULL: + */ + __pyx_v_n_bytes = (__pyx_v_cc_dat.cc_val_count * 8); + + /* "dataRead.pyx":493 + * if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): + * n_bytes = cc_dat.cc_val_count * 8 + * cc_val_buf = PyMem_Malloc(n_bytes) # <<<<<<<<<<<<<< + * if cc_val_buf != NULL: + * try: + */ + __pyx_v_cc_val_buf = ((unsigned char *)PyMem_Malloc(__pyx_v_n_bytes)); + + /* "dataRead.pyx":494 + * n_bytes = cc_dat.cc_val_count * 8 + * cc_val_buf = PyMem_Malloc(n_bytes) + * if cc_val_buf != NULL: # <<<<<<<<<<<<<< + * try: + * with nogil: + */ + __pyx_t_6 = (__pyx_v_cc_val_buf != NULL); + if (__pyx_t_6) { + + /* "dataRead.pyx":495 + * cc_val_buf = PyMem_Malloc(n_bytes) + * if cc_val_buf != NULL: + * try: # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, cc_val_buf, + */ + /*try:*/ { + + /* "dataRead.pyx":496 + * if cc_val_buf != NULL: + * try: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, cc_val_buf, + * n_bytes, + */ + { + #ifdef WITH_THREAD + PyThreadState *_save; + _save = NULL; + Py_UNBLOCK_THREADS + __Pyx_FastGIL_Remember(); + #endif + /*try:*/ { - /* "dataRead.pyx":338 - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset): - * cdef np.ndarray[np.uint8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned char mask = ((1 << bit_count) - 1) + /* "dataRead.pyx":497 + * try: + * with nogil: + * nread = c_pread(fd, cc_val_buf, # <<<<<<<<<<<<<< + * n_bytes, + * cc_ptr + cc_data_offset + 24) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 338, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 338, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 338, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; - } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_v_nread = pread(__pyx_v_fd, __pyx_v_cc_val_buf, __pyx_v_n_bytes, ((__pyx_v_cc_ptr + __pyx_v_cc_data_offset) + 24)); + } - /* "dataRead.pyx":340 - * cdef np.ndarray[np.uint8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned char mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef unsigned char temp1byte = 0 - * if bit_count == 8: + /* "dataRead.pyx":496 + * if cc_val_buf != NULL: + * try: + * with nogil: # <<<<<<<<<<<<<< + * nread = c_pread(fd, cc_val_buf, + * n_bytes, + */ + /*finally:*/ { + /*normal exit:*/{ + #ifdef WITH_THREAD + __Pyx_FastGIL_Forget(); + Py_BLOCK_THREADS + #endif + goto __pyx_L61; + } + __pyx_L61:; + } + } + + /* "dataRead.pyx":500 + * n_bytes, + * cc_ptr + cc_data_offset + 24) + * if nread == n_bytes: # <<<<<<<<<<<<<< + * dbl_ptr = cc_val_buf + * cc_val_list = [] + */ + __pyx_t_6 = (__pyx_v_nread == __pyx_v_n_bytes); + if (__pyx_t_6) { + + /* "dataRead.pyx":501 + * cc_ptr + cc_data_offset + 24) + * if nread == n_bytes: + * dbl_ptr = cc_val_buf # <<<<<<<<<<<<<< + * cc_val_list = [] + * for i in range(cc_dat.cc_val_count): + */ + __pyx_v_dbl_ptr = ((double *)__pyx_v_cc_val_buf); + + /* "dataRead.pyx":502 + * if nread == n_bytes: + * dbl_ptr = cc_val_buf + * cc_val_list = [] # <<<<<<<<<<<<<< + * for i in range(cc_dat.cc_val_count): + * cc_val_list.append(dbl_ptr[i]) + */ + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_XDECREF_SET(__pyx_v_cc_val_list, ((PyObject*)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "dataRead.pyx":503 + * dbl_ptr = cc_val_buf + * cc_val_list = [] + * for i in range(cc_dat.cc_val_count): # <<<<<<<<<<<<<< + * cc_val_list.append(dbl_ptr[i]) + * cc_dict['cc_val'] = cc_val_list + */ + __pyx_t_14 = __pyx_v_cc_dat.cc_val_count; + __pyx_t_15 = __pyx_t_14; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_15; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":504 + * cc_val_list = [] + * for i in range(cc_dat.cc_val_count): + * cc_val_list.append(dbl_ptr[i]) # <<<<<<<<<<<<<< + * cc_dict['cc_val'] = cc_val_list + * finally: + */ + __pyx_t_1 = PyFloat_FromDouble((__pyx_v_dbl_ptr[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 504, __pyx_L55_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_cc_val_list, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 504, __pyx_L55_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + + /* "dataRead.pyx":505 + * for i in range(cc_dat.cc_val_count): + * cc_val_list.append(dbl_ptr[i]) + * cc_dict['cc_val'] = cc_val_list # <<<<<<<<<<<<<< + * finally: + * PyMem_Free(cc_val_buf) + */ + if (unlikely((PyDict_SetItem(__pyx_v_cc_dict, __pyx_n_u_cc_val, __pyx_v_cc_val_list) < 0))) __PYX_ERR(0, 505, __pyx_L55_error) + + /* "dataRead.pyx":500 + * n_bytes, + * cc_ptr + cc_data_offset + 24) + * if nread == n_bytes: # <<<<<<<<<<<<<< + * dbl_ptr = cc_val_buf + * cc_val_list = [] */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + } + } + + /* "dataRead.pyx":507 + * cc_dict['cc_val'] = cc_val_list + * finally: + * PyMem_Free(cc_val_buf) # <<<<<<<<<<<<<< + * # Mark complex CC types for Python re-read + * if cc_dat.cc_type in (3, 7, 8, 9, 10, 11): + */ + /*finally:*/ { + /*normal exit:*/{ + PyMem_Free(__pyx_v_cc_val_buf); + goto __pyx_L56; + } + __pyx_L55_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_18); + __Pyx_XGOTREF(__pyx_t_19); + __Pyx_XGOTREF(__pyx_t_20); + __Pyx_XGOTREF(__pyx_t_21); + __Pyx_XGOTREF(__pyx_t_22); + __Pyx_XGOTREF(__pyx_t_23); + __pyx_t_5 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; + { + PyMem_Free(__pyx_v_cc_val_buf); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_21); + __Pyx_XGIVEREF(__pyx_t_22); + __Pyx_XGIVEREF(__pyx_t_23); + __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); + } + __Pyx_XGIVEREF(__pyx_t_18); + __Pyx_XGIVEREF(__pyx_t_19); + __Pyx_XGIVEREF(__pyx_t_20); + __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); + __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; + __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; + goto __pyx_L1_error; + } + __pyx_L56:; + } - /* "dataRead.pyx":341 - * cdef unsigned long long i - * cdef unsigned char mask = ((1 << bit_count) - 1) - * cdef unsigned char temp1byte = 0 # <<<<<<<<<<<<<< - * if bit_count == 8: - * for i in range(number_of_records): + /* "dataRead.pyx":494 + * n_bytes = cc_dat.cc_val_count * 8 + * cc_val_buf = PyMem_Malloc(n_bytes) + * if cc_val_buf != NULL: # <<<<<<<<<<<<<< + * try: + * with nogil: */ - __pyx_v_temp1byte = 0; + } - /* "dataRead.pyx":342 - * cdef unsigned char mask = ((1 << bit_count) - 1) - * cdef unsigned char temp1byte = 0 - * if bit_count == 8: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + /* "dataRead.pyx":491 + * } + * # Read cc_val (doubles) for common conversion types + * if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): # <<<<<<<<<<<<<< + * n_bytes = cc_dat.cc_val_count * 8 + * cc_val_buf = PyMem_Malloc(n_bytes) */ - __pyx_t_6 = (__pyx_v_bit_count == 8); - if (__pyx_t_6) { + } - /* "dataRead.pyx":343 - * cdef unsigned char temp1byte = 0 - * if bit_count == 8: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * buf[i] = temp1byte + /* "dataRead.pyx":509 + * PyMem_Free(cc_val_buf) + * # Mark complex CC types for Python re-read + * if cc_dat.cc_type in (3, 7, 8, 9, 10, 11): # <<<<<<<<<<<<<< + * cc_dict['_needs_completion'] = True + * */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + switch (__pyx_v_cc_dat.cc_type) { + case 3: + case 7: + case 8: + case 9: + case 10: + case 11: - /* "dataRead.pyx":344 - * if bit_count == 8: - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< - * buf[i] = temp1byte - * else: + /* "dataRead.pyx":510 + * # Mark complex CC types for Python re-read + * if cc_dat.cc_type in (3, 7, 8, 9, 10, 11): + * cc_dict['_needs_completion'] = True # <<<<<<<<<<<<<< + * + * # Read SI block (cached) */ - (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); + if (unlikely((PyDict_SetItem(__pyx_v_cc_dict, __pyx_n_u_needs_completion, Py_True) < 0))) __PYX_ERR(0, 510, __pyx_L1_error) - /* "dataRead.pyx":345 - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * buf[i] = temp1byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":509 + * PyMem_Free(cc_val_buf) + * # Mark complex CC types for Python re-read + * if cc_dat.cc_type in (3, 7, 8, 9, 10, 11): # <<<<<<<<<<<<<< + * cc_dict['_needs_completion'] = True + * */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; - } + break; + default: break; + } - /* "dataRead.pyx":342 - * cdef unsigned char mask = ((1 << bit_count) - 1) - * cdef unsigned char temp1byte = 0 - * if bit_count == 8: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + /* "dataRead.pyx":472 + * with nogil: + * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) + * if nread == 24: # <<<<<<<<<<<<<< + * cc_dict = { + * 'pointer': cc_ptr, */ - goto __pyx_L3; - } + } - /* "dataRead.pyx":347 - * buf[i] = temp1byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * # right shift + /* "dataRead.pyx":468 + * with nogil: + * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) + * if nread == 56: # <<<<<<<<<<<<<< + * cc_data_offset = 24 + (cc_hdr.link_count) * 8 + * with nogil: */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + } - /* "dataRead.pyx":348 - * else: - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":465 + * cc_ptr = cn_hdr.cn_cc_conversion + * cc_dict = {'cc_type': 0} + * if cc_ptr != 0: # <<<<<<<<<<<<<< + * with nogil: + * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) */ - (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); + } - /* "dataRead.pyx":350 - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp1byte = temp1byte >> bit_offset - * # mask left part + /* "dataRead.pyx":513 + * + * # Read SI block (cached) + * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: # <<<<<<<<<<<<<< + * si_ptr = cn_hdr.cn_si_source + * if si_ptr not in si_cache: */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); + __pyx_t_13 = (!(__pyx_v_minimal != 0)); + if (__pyx_t_13) { + } else { + __pyx_t_6 = __pyx_t_13; + goto __pyx_L70_bool_binop_done; + } + __pyx_t_13 = (!__pyx_v_channel_name_list); + if (__pyx_t_13) { + } else { + __pyx_t_6 = __pyx_t_13; + goto __pyx_L70_bool_binop_done; + } + __pyx_t_13 = (__pyx_v_cn_hdr.cn_si_source != 0); + __pyx_t_6 = __pyx_t_13; + __pyx_L70_bool_binop_done:; + if (__pyx_t_6) { + + /* "dataRead.pyx":514 + * # Read SI block (cached) + * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: + * si_ptr = cn_hdr.cn_si_source # <<<<<<<<<<<<<< + * if si_ptr not in si_cache: + * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) + */ + __pyx_t_11 = __pyx_v_cn_hdr.cn_si_source; + __pyx_v_si_ptr = __pyx_t_11; + + /* "dataRead.pyx":515 + * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: + * si_ptr = cn_hdr.cn_si_source + * if si_ptr not in si_cache: # <<<<<<<<<<<<<< + * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) + * si_dict = si_cache.get(si_ptr) + */ + __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(__pyx_v_si_cache == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 515, __pyx_L1_error) + } + __pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_t_1, __pyx_v_si_cache, Py_NE)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 515, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_6) { - /* "dataRead.pyx":351 - * # right shift - * if bit_offset > 0: - * temp1byte = temp1byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * temp1byte &= mask + /* "dataRead.pyx":516 + * si_ptr = cn_hdr.cn_si_source + * if si_ptr not in si_cache: + * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) # <<<<<<<<<<<<<< + * si_dict = si_cache.get(si_ptr) + * if si_dict is not None: */ - __pyx_v_temp1byte = (__pyx_v_temp1byte >> __pyx_v_bit_offset); + __pyx_t_1 = __pyx_f_8dataRead__fast_read_si(__pyx_v_fd, __pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(__pyx_v_si_cache == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 516, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (unlikely((PyDict_SetItem(__pyx_v_si_cache, __pyx_t_2, __pyx_t_1) < 0))) __PYX_ERR(0, 516, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":350 - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp1byte = temp1byte >> bit_offset - * # mask left part + /* "dataRead.pyx":515 + * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: + * si_ptr = cn_hdr.cn_si_source + * if si_ptr not in si_cache: # <<<<<<<<<<<<<< + * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) + * si_dict = si_cache.get(si_ptr) */ } - /* "dataRead.pyx":353 - * temp1byte = temp1byte >> bit_offset - * # mask left part - * temp1byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp1byte - * return buf + /* "dataRead.pyx":517 + * if si_ptr not in si_cache: + * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) + * si_dict = si_cache.get(si_ptr) # <<<<<<<<<<<<<< + * if si_dict is not None: + * cn_dict['SI'] = si_dict */ - __pyx_v_temp1byte = (__pyx_v_temp1byte & __pyx_v_mask); + if (unlikely(__pyx_v_si_cache == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); + __PYX_ERR(0, 517, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_si_cache, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 517, __pyx_L1_error) + __Pyx_XDECREF_SET(__pyx_v_si_dict, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; - /* "dataRead.pyx":354 - * # mask left part - * temp1byte &= mask - * buf[i] = temp1byte # <<<<<<<<<<<<<< - * return buf + /* "dataRead.pyx":518 + * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) + * si_dict = si_cache.get(si_ptr) + * if si_dict is not None: # <<<<<<<<<<<<<< + * cn_dict['SI'] = si_dict * */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; + __pyx_t_6 = (__pyx_v_si_dict != ((PyObject*)Py_None)); + if (__pyx_t_6) { + + /* "dataRead.pyx":519 + * si_dict = si_cache.get(si_ptr) + * if si_dict is not None: + * cn_dict['SI'] = si_dict # <<<<<<<<<<<<<< + * + * results.append((cn_key, cn_dict, cc_dict)) + */ + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_SI_2, __pyx_v_si_dict) < 0))) __PYX_ERR(0, 519, __pyx_L1_error) + + /* "dataRead.pyx":518 + * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) + * si_dict = si_cache.get(si_ptr) + * if si_dict is not None: # <<<<<<<<<<<<<< + * cn_dict['SI'] = si_dict + * + */ + } + + /* "dataRead.pyx":513 + * + * # Read SI block (cached) + * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: # <<<<<<<<<<<<<< + * si_ptr = cn_hdr.cn_si_source + * if si_ptr not in si_cache: + */ } + + /* "dataRead.pyx":521 + * cn_dict['SI'] = si_dict + * + * results.append((cn_key, cn_dict, cc_dict)) # <<<<<<<<<<<<<< + * pointer = cn_hdr.cn_cn_next + * + */ + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_cn_key); + __Pyx_GIVEREF(__pyx_v_cn_key); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cn_key)) __PYX_ERR(0, 521, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_cn_dict); + __Pyx_GIVEREF(__pyx_v_cn_dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_cn_dict)) __PYX_ERR(0, 521, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_cc_dict); + __Pyx_GIVEREF(__pyx_v_cc_dict); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_cc_dict)) __PYX_ERR(0, 521, __pyx_L1_error); + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_results, __pyx_t_2); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 521, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "dataRead.pyx":522 + * + * results.append((cn_key, cn_dict, cc_dict)) + * pointer = cn_hdr.cn_cn_next # <<<<<<<<<<<<<< + * + * return results + */ + __pyx_t_11 = __pyx_v_cn_hdr.cn_cn_next; + __pyx_v_pointer = __pyx_t_11; } - __pyx_L3:; + __pyx_L4_break:; - /* "dataRead.pyx":355 - * temp1byte &= mask - * buf[i] = temp1byte - * return buf # <<<<<<<<<<<<<< + /* "dataRead.pyx":524 + * pointer = cn_hdr.cn_cn_next + * + * return results # <<<<<<<<<<<<<< + * * - * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); + __Pyx_INCREF(__pyx_v_results); + __pyx_r = __pyx_v_results; goto __pyx_L0; - /* "dataRead.pyx":335 - * return buf.byteswap() + /* "dataRead.pyx":322 * - * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset): + * + * def read_cn_chain_fast(object fid, uint64_t first_pointer, # <<<<<<<<<<<<<< + * dict si_cache, int minimal, bint channel_name_list): + * """Read the CN linked list starting at first_pointer using pread(). */ /* function exit code */ @@ -26628,2048 +27621,2577 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __Pyx_XDECREF(__pyx_t_1); __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_unsigned_char", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; + __Pyx_AddTraceback("dataRead.read_cn_chain_fast", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XDECREF(__pyx_v_cn_key); + __Pyx_XDECREF(__pyx_v_results); + __Pyx_XDECREF(__pyx_v_cn_dict); + __Pyx_XDECREF(__pyx_v_cc_dict); + __Pyx_XDECREF(__pyx_v_si_dict); + __Pyx_XDECREF(__pyx_v_cn_name); + __Pyx_XDECREF(__pyx_v_unit_str); + __Pyx_XDECREF(__pyx_v_desc_str); + __Pyx_XDECREF(__pyx_v_cc_val_list); + __Pyx_XDECREF(__pyx_v_extra_links); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":357 - * return buf +/* "dataRead.pyx":527 * - * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset): + * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def sorted_data_read(bytes tmp, unsigned short bit_count, */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned char __pyx_v_mask; - char __pyx_v_temp1byte; - unsigned char __pyx_v_sign_bit; - unsigned char __pyx_v_sign_bit_mask; - unsigned char __pyx_v_sign_extend; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - int __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_3sorted_data_read(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8dataRead_2sorted_data_read, "dataRead function to read in cython a channel from a byte stream\n\n Parameters\n ------------\n tmp : bytes\n byte stream\n bit_count : unsigned short\n number of bit taken by the channel in the record\n signal_data_type : unsigned short\n int to describe data type\n record_format : string\n basic numpy dtype description of data type, used to create\n returned numpy ndarray\n number_of_records : unsigned long long\n number of records in byte stream\n record_byte_size : unsigned long\n number of bytes taken by one record repeated in byte stream\n bit_offset : unsigned char\n bit offset of data in C aligned bytes\n pos_byte_beg : unsigned long\n beginning byte position of channel in record\n n_bytes : unsigned long\n bytes length of channel in record\n array : boolean\n reads an array, not a vector\n\n Returns\n -------\n ndarray of type record_format with number_of_records records.\n Byte order is swapped if necessary to match machine byte order before bits offset and masking\n "); +static PyMethodDef __pyx_mdef_8dataRead_3sorted_data_read = {"sorted_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_3sorted_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_2sorted_data_read}; +static PyObject *__pyx_pw_8dataRead_3sorted_data_read(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_tmp = 0; + unsigned short __pyx_v_bit_count; + unsigned short __pyx_v_signal_data_type; + PyObject *__pyx_v_record_format = 0; + unsigned PY_LONG_LONG __pyx_v_number_of_records; + unsigned long __pyx_v_record_byte_size; + unsigned char __pyx_v_bit_offset; + unsigned long __pyx_v_pos_byte_beg; + unsigned long __pyx_v_n_bytes; + PyObject *__pyx_v_array = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_signed_char", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - - /* "dataRead.pyx":360 - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset): - * cdef np.ndarray[np.int8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned char mask = ((1 << bit_count) - 1) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 360, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 360, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 360, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 360, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 360, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 360, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("sorted_data_read (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 360, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tmp,&__pyx_n_s_bit_count,&__pyx_n_s_signal_data_type,&__pyx_n_s_record_format,&__pyx_n_s_number_of_records,&__pyx_n_s_record_byte_size,&__pyx_n_s_bit_offset,&__pyx_n_s_pos_byte_beg,&__pyx_n_s_n_bytes,&__pyx_n_s_array,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 10: values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tmp)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_bit_count)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 1); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 2); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_format)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 3); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_number_of_records)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 4); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 5: + if (likely((values[5] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_byte_size)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[5]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 5); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 6: + if (likely((values[6] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_bit_offset)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[6]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 6); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 7: + if (likely((values[7] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pos_byte_beg)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[7]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 7); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 8: + if (likely((values[8] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_bytes)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[8]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 8); __PYX_ERR(0, 527, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 9: + if (likely((values[9] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_array)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[9]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 9); __PYX_ERR(0, 527, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sorted_data_read") < 0)) __PYX_ERR(0, 527, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 10)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + values[5] = __Pyx_Arg_FASTCALL(__pyx_args, 5); + values[6] = __Pyx_Arg_FASTCALL(__pyx_args, 6); + values[7] = __Pyx_Arg_FASTCALL(__pyx_args, 7); + values[8] = __Pyx_Arg_FASTCALL(__pyx_args, 8); + values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); } + __pyx_v_tmp = ((PyObject*)values[0]); + __pyx_v_bit_count = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_bit_count == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 529, __pyx_L3_error) + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 530, __pyx_L3_error) + __pyx_v_record_format = ((PyObject*)values[3]); + __pyx_v_number_of_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_number_of_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 530, __pyx_L3_error) + __pyx_v_record_byte_size = __Pyx_PyInt_As_unsigned_long(values[5]); if (unlikely((__pyx_v_record_byte_size == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 531, __pyx_L3_error) + __pyx_v_bit_offset = __Pyx_PyInt_As_unsigned_char(values[6]); if (unlikely((__pyx_v_bit_offset == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 531, __pyx_L3_error) + __pyx_v_pos_byte_beg = __Pyx_PyInt_As_unsigned_long(values[7]); if (unlikely((__pyx_v_pos_byte_beg == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L3_error) + __pyx_v_n_bytes = __Pyx_PyInt_As_unsigned_long(values[8]); if (unlikely((__pyx_v_n_bytes == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L3_error) + __pyx_v_array = values[9]; } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, __pyx_nargs); __PYX_ERR(0, 527, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.sorted_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 529, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_record_format), (&PyUnicode_Type), 1, "record_format", 1))) __PYX_ERR(0, 530, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_2sorted_data_read(__pyx_self, __pyx_v_tmp, __pyx_v_bit_count, __pyx_v_signal_data_type, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_bit_offset, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_array); - /* "dataRead.pyx":362 - * cdef np.ndarray[np.int8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned char mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef char temp1byte = 0 - * cdef unsigned char sign_bit = 0 - */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":363 - * cdef unsigned long long i - * cdef unsigned char mask = ((1 << bit_count) - 1) - * cdef char temp1byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned char sign_bit = 0 - * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) - */ - __pyx_v_temp1byte = 0; +static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tmp, unsigned short __pyx_v_bit_count, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, PyObject *__pyx_v_array) { + char const *__pyx_v_bit_stream; + CYTHON_UNUSED long __pyx_v_swap_flag; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + unsigned char __pyx_t_6; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("sorted_data_read", 1); - /* "dataRead.pyx":364 - * cdef unsigned char mask = ((1 << bit_count) - 1) - * cdef char temp1byte = 0 - * cdef unsigned char sign_bit = 0 # <<<<<<<<<<<<<< - * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count + /* "dataRead.pyx":564 + * Byte order is swapped if necessary to match machine byte order before bits offset and masking + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< + * if not array: + * if 'V' in record_format or 'S' in record_format or record_format is None: */ - __pyx_v_sign_bit = 0; + __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 564, __pyx_L1_error) + __pyx_v_bit_stream = __pyx_t_1; - /* "dataRead.pyx":365 - * cdef char temp1byte = 0 - * cdef unsigned char sign_bit = 0 - * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< - * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count - * if bit_count == 8: + /* "dataRead.pyx":565 + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * if not array: # <<<<<<<<<<<<<< + * if 'V' in record_format or 'S' in record_format or record_format is None: + * return read_byte(bit_stream, record_format, number_of_records, */ - __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_array); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 565, __pyx_L1_error) + __pyx_t_3 = (!__pyx_t_2); + if (__pyx_t_3) { - /* "dataRead.pyx":366 - * cdef unsigned char sign_bit = 0 - * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< - * if bit_count == 8: - * for i in range(number_of_records): + /* "dataRead.pyx":566 + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * if not array: + * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) */ - __pyx_v_sign_extend = (((1 << (8 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); + if (unlikely(__pyx_v_record_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 566, __pyx_L1_error) + } + __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_V, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 566, __pyx_L1_error) + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + if (unlikely(__pyx_v_record_format == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 566, __pyx_L1_error) + } + __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_S, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 566, __pyx_L1_error) + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L5_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_record_format == ((PyObject*)Py_None)); + __pyx_t_3 = __pyx_t_2; + __pyx_L5_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":367 - * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count - * if bit_count == 8: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + /* "dataRead.pyx":567 + * if not array: + * if 'V' in record_format or 'S' in record_format or record_format is None: + * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float */ - __pyx_t_6 = (__pyx_v_bit_count == 8); - if (__pyx_t_6) { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":368 - * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count - * if bit_count == 8: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * buf[i] = temp1byte + /* "dataRead.pyx":568 + * if 'V' in record_format or 'S' in record_format or record_format is None: + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 567, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":369 - * if bit_count == 8: - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< - * buf[i] = temp1byte - * else: + /* "dataRead.pyx":566 + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * if not array: + * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) */ - (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); + } - /* "dataRead.pyx":370 - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * buf[i] = temp1byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":569 + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; + switch (__pyx_v_signal_data_type) { + case 4: + case 5: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L8_bool_binop_done; } + __pyx_t_5 = (__pyx_v_n_bytes == 4); + __pyx_t_3 = __pyx_t_5; + __pyx_L8_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":367 - * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count - * if bit_count == 8: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + /* "dataRead.pyx":570 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, */ - goto __pyx_L3; - } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 570, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 570, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + goto __pyx_L12_next_or; + } else { + } + __pyx_t_5 = (__pyx_v_signal_data_type == 4); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L11_bool_binop_done; + } + __pyx_L12_next_or:; - /* "dataRead.pyx":372 - * buf[i] = temp1byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * # right shift + /* "dataRead.pyx":571 + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 571, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 571, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_signal_data_type == 5); + __pyx_t_3 = __pyx_t_5; + __pyx_L11_bool_binop_done:; - /* "dataRead.pyx":373 - * else: - * for i in range(number_of_records): - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":570 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, */ - (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); + if (__pyx_t_3) { - /* "dataRead.pyx":375 - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp1byte = temp1byte >> bit_offset - * # mask left part + /* "dataRead.pyx":572 + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":376 - * # right shift - * if bit_offset > 0: - * temp1byte = temp1byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * temp1byte &= mask + /* "dataRead.pyx":573 + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_float(bit_stream, record_format, number_of_records, */ - __pyx_v_temp1byte = (__pyx_v_temp1byte >> __pyx_v_bit_offset); + __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 572, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":375 - * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp1byte = temp1byte >> bit_offset - * # mask left part + /* "dataRead.pyx":570 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_float(bit_stream, record_format, number_of_records, */ } - /* "dataRead.pyx":378 - * temp1byte = temp1byte >> bit_offset - * # mask left part - * temp1byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp1byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp1byte = (__pyx_v_temp1byte & __pyx_v_mask); - - /* "dataRead.pyx":379 - * # mask left part - * temp1byte &= mask - * sign_bit = temp1byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp1byte |= sign_extend + /* "dataRead.pyx":575 + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double */ - __pyx_v_sign_bit = (__pyx_v_temp1byte & __pyx_v_sign_bit_mask); + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":380 - * temp1byte &= mask - * sign_bit = temp1byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp1byte |= sign_extend - * buf[i] = temp1byte + /* "dataRead.pyx":576 + * else: # swap bytes + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 575, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":381 - * sign_bit = temp1byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp1byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp1byte - * return buf + /* "dataRead.pyx":569 + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): */ - __pyx_v_temp1byte = (__pyx_v_temp1byte | __pyx_v_sign_extend); + } - /* "dataRead.pyx":380 - * temp1byte &= mask - * sign_bit = temp1byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp1byte |= sign_extend - * buf[i] = temp1byte + /* "dataRead.pyx":577 + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): */ - } - - /* "dataRead.pyx":382 - * if sign_bit: # negative value, sign extend - * temp1byte |= sign_extend - * buf[i] = temp1byte # <<<<<<<<<<<<<< - * return buf - * - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; + switch (__pyx_v_signal_data_type) { + case 4: + case 5: + __pyx_t_5 = 1; + break; + default: + __pyx_t_5 = 0; + break; } - } - __pyx_L3:; - - /* "dataRead.pyx":383 - * temp1byte |= sign_extend - * buf[i] = temp1byte - * return buf # <<<<<<<<<<<<<< - * - * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __pyx_t_2 = __pyx_t_5; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_n_bytes == 8); + __pyx_t_3 = __pyx_t_2; + __pyx_L15_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":357 - * return buf - * - * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset): + /* "dataRead.pyx":578 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 578, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 578, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_2) { + goto __pyx_L19_next_or; + } else { + } + __pyx_t_2 = (__pyx_v_signal_data_type == 4); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L18_bool_binop_done; + } + __pyx_L19_next_or:; - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_signed_char", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":385 - * return buf - * - * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + /* "dataRead.pyx":579 + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 579, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 579, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L18_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_signal_data_type == 5); + __pyx_t_3 = __pyx_t_2; + __pyx_L18_bool_binop_done:; -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned short __pyx_v_mask; - unsigned short __pyx_v_temp2byte; - unsigned char __pyx_v_temp[2]; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - int __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - unsigned int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_unsigned_short", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - - /* "dataRead.pyx":388 - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): - * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) + /* "dataRead.pyx":578 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 388, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 388, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 388, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 388, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; - } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + if (__pyx_t_3) { - /* "dataRead.pyx":390 - * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef unsigned short temp2byte = 0 - * cdef unsigned char temp[2] + /* "dataRead.pyx":580 + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":391 - * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) - * cdef unsigned short temp2byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned char temp[2] - * if bit_count == 16: + /* "dataRead.pyx":581 + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_double(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = 0; + __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 580, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":393 - * cdef unsigned short temp2byte = 0 - * cdef unsigned char temp[2] - * if bit_count == 16: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":578 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_double(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_count == 16); - if (__pyx_t_6) { + } - /* "dataRead.pyx":394 - * cdef unsigned char temp[2] - * if bit_count == 16: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte + /* "dataRead.pyx":583 + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":395 - * if bit_count == 16: - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * buf[i] = temp2byte - * if swap == 0: + /* "dataRead.pyx":584 + * else: # swap bytes + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ */ - (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 583, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":396 - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":577 + * return read_float(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":397 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: - */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":398 - * buf[i] = temp2byte - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; - - /* "dataRead.pyx":397 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":585 + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): */ + switch (__pyx_v_signal_data_type) { + case 4: + case 5: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L22_bool_binop_done; } + __pyx_t_5 = (__pyx_v_n_bytes == 2); + __pyx_t_3 = __pyx_t_5; + __pyx_L22_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":400 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * else: - * if swap == 0: + /* "dataRead.pyx":586 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 400, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 586, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 586, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + goto __pyx_L26_next_or; + } else { } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 400, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = (__pyx_v_signal_data_type == 4); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L25_bool_binop_done; } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - - /* "dataRead.pyx":393 - * cdef unsigned short temp2byte = 0 - * cdef unsigned char temp[2] - * if bit_count == 16: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - */ - } - - /* "dataRead.pyx":402 - * return buf.byteswap() - * else: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - */ - /*else*/ { - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":403 - * else: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * # right shift - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":404 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + __pyx_L26_next_or:; - /* "dataRead.pyx":406 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset - * # mask left part + /* "dataRead.pyx":587 + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 587, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 587, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L25_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_signal_data_type == 5); + __pyx_t_3 = __pyx_t_5; + __pyx_L25_bool_binop_done:; - /* "dataRead.pyx":407 - * # right shift - * if bit_offset > 0: - * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 16: + /* "dataRead.pyx":586 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); + if (__pyx_t_3) { - /* "dataRead.pyx":406 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset - * # mask left part + /* "dataRead.pyx":588 + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes */ - } + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":409 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * if bit_count < 16: # <<<<<<<<<<<<<< - * temp2byte &= mask - * buf[i] = temp2byte + /* "dataRead.pyx":589 + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_half(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_count < 16); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 588, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":410 - * # mask left part - * if bit_count < 16: - * temp2byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp2byte - * else: + /* "dataRead.pyx":586 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision + * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 5): + * return read_half(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + } - /* "dataRead.pyx":409 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * if bit_count < 16: # <<<<<<<<<<<<<< - * temp2byte &= mask - * buf[i] = temp2byte + /* "dataRead.pyx":591 + * record_byte_size, pos_byte_beg, 0) + * else: # swap bytes + * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char */ - } + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":411 - * if bit_count < 16: - * temp2byte &= mask - * buf[i] = temp2byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":592 + * else: # swap bytes + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char + * return read_unsigned_char(bit_stream, record_format, number_of_records, */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 591, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; } - /* "dataRead.pyx":402 - * return buf.byteswap() - * else: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":585 + * return read_double(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 4) or \ + * (byteorder == 'big' and signal_data_type == 5): */ - goto __pyx_L7; } - /* "dataRead.pyx":413 - * buf[i] = temp2byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * temp2byte = temp[0]<<8 | temp[1] # swap bytes + /* "dataRead.pyx":593 + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< + * return read_unsigned_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + switch (__pyx_v_signal_data_type) { + case 0: + case 1: + case 13: + __pyx_t_5 = 1; + break; + default: + __pyx_t_5 = 0; + break; + } + __pyx_t_2 = __pyx_t_5; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L29_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_n_bytes == 1); + __pyx_t_3 = __pyx_t_2; + __pyx_L29_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":414 - * else: - * for i in range(number_of_records): - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * temp2byte = temp[0]<<8 | temp[1] # swap bytes - * # right shift + /* "dataRead.pyx":594 + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char + * return read_unsigned_char(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char */ - (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":415 - * for i in range(number_of_records): - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":595 + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char + * return read_unsigned_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) # <<<<<<<<<<<<<< + * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char + * return read_signed_char(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 594, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":417 - * temp2byte = temp[0]<<8 | temp[1] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset - * # mask left part + /* "dataRead.pyx":593 + * return read_half(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 1) + * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< + * return read_unsigned_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + } - /* "dataRead.pyx":418 - * # right shift - * if bit_offset > 0: - * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 16: + /* "dataRead.pyx":596 + * return read_unsigned_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char # <<<<<<<<<<<<<< + * return read_signed_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) */ - __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); + switch (__pyx_v_signal_data_type) { + case 2: + case 3: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L31_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_n_bytes == 1); + __pyx_t_3 = __pyx_t_5; + __pyx_L31_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":417 - * temp2byte = temp[0]<<8 | temp[1] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset - * # mask left part + /* "dataRead.pyx":597 + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char + * return read_signed_char(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short */ - } + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":420 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * if bit_count < 16: # <<<<<<<<<<<<<< - * temp2byte &= mask - * buf[i] = temp2byte + /* "dataRead.pyx":598 + * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char + * return read_signed_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) # <<<<<<<<<<<<<< + * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short + * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_t_6 = (__pyx_v_bit_count < 16); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_signed_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 597, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":421 - * # mask left part - * if bit_count < 16: - * temp2byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp2byte - * return buf + /* "dataRead.pyx":596 + * return read_unsigned_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char # <<<<<<<<<<<<<< + * return read_signed_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) */ - __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + } - /* "dataRead.pyx":420 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * if bit_count < 16: # <<<<<<<<<<<<<< - * temp2byte &= mask - * buf[i] = temp2byte + /* "dataRead.pyx":599 + * return read_signed_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): */ - } + switch (__pyx_v_signal_data_type) { + case 0: + case 1: + case 13: + case 14: + __pyx_t_5 = 1; + break; + default: + __pyx_t_5 = 0; + break; + } + __pyx_t_2 = __pyx_t_5; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L33_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_n_bytes <= 2); + __pyx_t_3 = __pyx_t_2; + __pyx_L33_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":422 - * if bit_count < 16: - * temp2byte &= mask - * buf[i] = temp2byte # <<<<<<<<<<<<<< - * return buf - * + /* "dataRead.pyx":600 + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_short(bit_stream, record_format, number_of_records, */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 600, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 600, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_2) { + goto __pyx_L37_next_or; + } else { } - } - __pyx_L7:; + __pyx_t_2 = (__pyx_v_signal_data_type == 0); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L36_bool_binop_done; + } + __pyx_L37_next_or:; - /* "dataRead.pyx":423 - * temp2byte &= mask - * buf[i] = temp2byte - * return buf # <<<<<<<<<<<<<< - * - * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, + /* "dataRead.pyx":601 + * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< + * return read_unsigned_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; - } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L36_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_signal_data_type == 1); + __pyx_t_3 = __pyx_t_2; + __pyx_L36_bool_binop_done:; - /* "dataRead.pyx":385 - * return buf - * - * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + /* "dataRead.pyx":600 + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_short(bit_stream, record_format, number_of_records, */ + if (__pyx_t_3) { - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_unsigned_short", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":425 - * return buf - * - * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + /* "dataRead.pyx":602 + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) + * else: # swap bytes */ + __Pyx_XDECREF(__pyx_r); -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned short __pyx_v_mask; - short __pyx_v_temp2byte; - unsigned short __pyx_v_sign_bit; - unsigned short __pyx_v_sign_bit_mask; - unsigned short __pyx_v_sign_extend; - unsigned char __pyx_v_temp[2]; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - int __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - unsigned int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_signed_short", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - - /* "dataRead.pyx":428 - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): - * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) + /* "dataRead.pyx":603 + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_unsigned_short(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 428, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 428, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 428, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; - } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 602, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":430 - * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef short temp2byte = 0 - * cdef unsigned short sign_bit = 0 + /* "dataRead.pyx":600 + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_short(bit_stream, record_format, number_of_records, */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + } - /* "dataRead.pyx":431 - * cdef unsigned long long i - * cdef unsigned short mask = ((1 << bit_count) - 1) - * cdef short temp2byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned short sign_bit = 0 - * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) + /* "dataRead.pyx":605 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) + * else: # swap bytes + * return read_unsigned_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short */ - __pyx_v_temp2byte = 0; + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":432 - * cdef unsigned short mask = ((1 << bit_count) - 1) - * cdef short temp2byte = 0 - * cdef unsigned short sign_bit = 0 # <<<<<<<<<<<<<< - * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count + /* "dataRead.pyx":606 + * else: # swap bytes + * return read_unsigned_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short + * if (byteorder == 'little' and signal_data_type == 2) or \ */ - __pyx_v_sign_bit = 0; + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":433 - * cdef short temp2byte = 0 - * cdef unsigned short sign_bit = 0 - * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count - * cdef unsigned char temp[2] + /* "dataRead.pyx":599 + * return read_signed_char(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset) + * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): */ - __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); + } - /* "dataRead.pyx":434 - * cdef unsigned short sign_bit = 0 - * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< - * cdef unsigned char temp[2] - * if bit_count == 16: + /* "dataRead.pyx":607 + * return read_unsigned_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): */ - __pyx_v_sign_extend = (((1 << (16 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); + switch (__pyx_v_signal_data_type) { + case 2: + case 3: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L40_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_n_bytes <= 2); + __pyx_t_3 = __pyx_t_5; + __pyx_L40_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":436 - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count - * cdef unsigned char temp[2] - * if bit_count == 16: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":608 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_short(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_count == 16); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 608, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 608, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + goto __pyx_L44_next_or; + } else { + } + __pyx_t_5 = (__pyx_v_signal_data_type == 2); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L43_bool_binop_done; + } + __pyx_L44_next_or:; - /* "dataRead.pyx":437 - * cdef unsigned char temp[2] - * if bit_count == 16: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte + /* "dataRead.pyx":609 + * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< + * return read_signed_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 609, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 609, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L43_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_signal_data_type == 3); + __pyx_t_3 = __pyx_t_5; + __pyx_L43_bool_binop_done:; - /* "dataRead.pyx":438 - * if bit_count == 16: - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * buf[i] = temp2byte - * if swap == 0: + /* "dataRead.pyx":608 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_short(bit_stream, record_format, number_of_records, */ - (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + if (__pyx_t_3) { - /* "dataRead.pyx":439 - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":610 + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) + * else: # swap bytes */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; - } + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":440 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: - */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":441 - * buf[i] = temp2byte - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; - - /* "dataRead.pyx":440 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * buf[i] = temp2byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: - */ - } - - /* "dataRead.pyx":443 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * else: - * if swap == 0: + /* "dataRead.pyx":611 + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_signed_short(bit_stream, record_format, number_of_records, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 443, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 610, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":436 - * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count - * cdef unsigned char temp[2] - * if bit_count == 16: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":608 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_short(bit_stream, record_format, number_of_records, */ - } + } - /* "dataRead.pyx":445 - * return buf.byteswap() - * else: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":613 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) + * else: # swap bytes + * return read_signed_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int */ - /*else*/ { - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":446 - * else: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * # right shift + /* "dataRead.pyx":614 + * else: # swap bytes + * return read_signed_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int + * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 613, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":447 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":607 + * return read_unsigned_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): */ - (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + } - /* "dataRead.pyx":449 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset - * # mask left part + /* "dataRead.pyx":615 + * return read_signed_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + switch (__pyx_v_signal_data_type) { + case 0: + case 1: + case 14: + __pyx_t_5 = 1; + break; + default: + __pyx_t_5 = 0; + break; + } + __pyx_t_2 = __pyx_t_5; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L47_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_n_bytes <= 4); + __pyx_t_3 = __pyx_t_2; + __pyx_L47_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":450 - * # right shift - * if bit_offset > 0: - * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * temp2byte &= mask + /* "dataRead.pyx":616 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 616, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 616, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_2) { + goto __pyx_L51_next_or; + } else { + } + __pyx_t_2 = (__pyx_v_signal_data_type == 0); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L50_bool_binop_done; + } + __pyx_L51_next_or:; - /* "dataRead.pyx":449 - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset - * # mask left part + /* "dataRead.pyx":617 + * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< + * return read_unsigned_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 617, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 617, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L50_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_signal_data_type == 1); + __pyx_t_3 = __pyx_t_2; + __pyx_L50_bool_binop_done:; - /* "dataRead.pyx":452 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * temp2byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":616 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + if (__pyx_t_3) { - /* "dataRead.pyx":453 - * # mask left part - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend + /* "dataRead.pyx":618 + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + * else: # swap bytes */ - __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":454 - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp2byte |= sign_extend - * buf[i] = temp2byte + /* "dataRead.pyx":619 + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 618, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":455 - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp2byte - * else: + /* "dataRead.pyx":616 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); + } - /* "dataRead.pyx":454 - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp2byte |= sign_extend - * buf[i] = temp2byte + /* "dataRead.pyx":621 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + * else: # swap bytes + * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int */ - } + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":456 - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend - * buf[i] = temp2byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":622 + * else: # swap bytes + * return read_unsigned_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int + * if (byteorder == 'little' and signal_data_type == 2) or \ */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; } - /* "dataRead.pyx":445 - * return buf.byteswap() - * else: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + /* "dataRead.pyx":615 + * return read_signed_short(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) + * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): */ - goto __pyx_L7; } - /* "dataRead.pyx":458 - * buf[i] = temp2byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * temp2byte = temp[0]<<8 | temp[1] # swap bytes - */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":459 - * else: - * for i in range(number_of_records): - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< - * temp2byte = temp[0]<<8 | temp[1] # swap bytes - * # right shift + /* "dataRead.pyx":623 + * return read_unsigned_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): */ - (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + switch (__pyx_v_signal_data_type) { + case 2: + case 3: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L54_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_n_bytes <= 4); + __pyx_t_3 = __pyx_t_5; + __pyx_L54_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":460 - * for i in range(number_of_records): - * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) - * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":624 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_int(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 624, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 624, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + goto __pyx_L58_next_or; + } else { + } + __pyx_t_5 = (__pyx_v_signal_data_type == 2); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L57_bool_binop_done; + } + __pyx_L58_next_or:; - /* "dataRead.pyx":462 - * temp2byte = temp[0]<<8 | temp[1] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset - * # mask left part + /* "dataRead.pyx":625 + * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< + * return read_signed_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 625, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 625, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L57_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_signal_data_type == 3); + __pyx_t_3 = __pyx_t_5; + __pyx_L57_bool_binop_done:; - /* "dataRead.pyx":463 - * # right shift - * if bit_offset > 0: - * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * temp2byte &= mask + /* "dataRead.pyx":624 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_int(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); + if (__pyx_t_3) { - /* "dataRead.pyx":462 - * temp2byte = temp[0]<<8 | temp[1] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp2byte = temp2byte >> bit_offset - * # mask left part + /* "dataRead.pyx":626 + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + * else: # swap bytes */ - } + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":465 - * temp2byte = temp2byte >> bit_offset - * # mask left part - * temp2byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":627 + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_signed_int(bit_stream, record_format, number_of_records, */ - __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); + __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":466 - * # mask left part - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend + /* "dataRead.pyx":624 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_int(bit_stream, record_format, number_of_records, */ - __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); + } - /* "dataRead.pyx":467 - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp2byte |= sign_extend - * buf[i] = temp2byte + /* "dataRead.pyx":629 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + * else: # swap bytes + * return read_signed_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":468 - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp2byte - * return buf + /* "dataRead.pyx":630 + * else: # swap bytes + * return read_signed_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long + * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); + __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":467 - * temp2byte &= mask - * sign_bit = temp2byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp2byte |= sign_extend - * buf[i] = temp2byte + /* "dataRead.pyx":623 + * return read_unsigned_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): */ - } + } - /* "dataRead.pyx":469 - * if sign_bit: # negative value, sign extend - * temp2byte |= sign_extend - * buf[i] = temp2byte # <<<<<<<<<<<<<< - * return buf - * + /* "dataRead.pyx":631 + * return read_signed_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; - } + switch (__pyx_v_signal_data_type) { + case 0: + case 1: + __pyx_t_5 = 1; + break; + default: + __pyx_t_5 = 0; + break; } - __pyx_L7:; + __pyx_t_2 = __pyx_t_5; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L61_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_n_bytes <= 8); + __pyx_t_3 = __pyx_t_2; + __pyx_L61_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":470 - * temp2byte |= sign_extend - * buf[i] = temp2byte - * return buf # <<<<<<<<<<<<<< - * - * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; - } - - /* "dataRead.pyx":425 - * return buf - * - * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + /* "dataRead.pyx":632 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 632, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 632, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_2) { + goto __pyx_L65_next_or; + } else { + } + __pyx_t_2 = (__pyx_v_signal_data_type == 0); + if (!__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L64_bool_binop_done; + } + __pyx_L65_next_or:; - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_signed_short", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":472 - * return buf - * - * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + /* "dataRead.pyx":633 + * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 633, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + } else { + __pyx_t_3 = __pyx_t_2; + goto __pyx_L64_bool_binop_done; + } + __pyx_t_2 = (__pyx_v_signal_data_type == 1); + __pyx_t_3 = __pyx_t_2; + __pyx_L64_bool_binop_done:; -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned int __pyx_v_mask; - unsigned int __pyx_v_temp4byte; - unsigned char __pyx_v_temp4[4]; - unsigned char __pyx_v_temp3[3]; - __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; - __Pyx_Buffer __pyx_pybuffer_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; - PyArrayObject *__pyx_t_5 = NULL; - int __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - unsigned PY_LONG_LONG __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - unsigned int __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_unsigned_int", 1); - __pyx_pybuffer_buf.pybuffer.buf = NULL; - __pyx_pybuffer_buf.refcount = 0; - __pyx_pybuffernd_buf.data = NULL; - __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - - /* "dataRead.pyx":475 - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) + /* "dataRead.pyx":632 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 475, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 475, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); - { - __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { - __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 475, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; - } - } - __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + if (__pyx_t_3) { - /* "dataRead.pyx":477 - * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef unsigned int temp4byte = 0 - * cdef unsigned char temp4[4] + /* "dataRead.pyx":634 + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + * else: # swap bytes */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":478 - * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) - * cdef unsigned int temp4byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] + /* "dataRead.pyx":635 + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __pyx_v_temp4byte = 0; + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 634, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":481 - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] - * if bit_count == 32: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + /* "dataRead.pyx":632 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long + * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 1): + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_count == 32); - if (__pyx_t_6) { + } - /* "dataRead.pyx":482 - * cdef unsigned char temp3[3] - * if bit_count == 32: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte + /* "dataRead.pyx":637 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + * else: # swap bytes + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":483 - * if bit_count == 32: - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * if swap == 0: + /* "dataRead.pyx":638 + * else: # swap bytes + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long + * if (byteorder == 'little' and signal_data_type == 2) or \ */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 637, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":484 - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":631 + * return read_signed_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 0) or \ + * (byteorder == 'big' and signal_data_type == 1): */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":485 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: - */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":486 - * buf[i] = temp4byte - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; - - /* "dataRead.pyx":485 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":639 + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): */ + switch (__pyx_v_signal_data_type) { + case 2: + case 3: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_5 = __pyx_t_2; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L68_bool_binop_done; } + __pyx_t_5 = (__pyx_v_n_bytes <= 8); + __pyx_t_3 = __pyx_t_5; + __pyx_L68_bool_binop_done:; + if (__pyx_t_3) { - /* "dataRead.pyx":488 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * elif n_bytes == 4: - * if swap == 0: + /* "dataRead.pyx":640 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_longlong(bit_stream, record_format, number_of_records, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 488, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 640, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 640, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_5) { + goto __pyx_L72_next_or; + } else { } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 488, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = (__pyx_v_signal_data_type == 2); + if (!__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L71_bool_binop_done; } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - - /* "dataRead.pyx":481 - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] - * if bit_count == 32: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - */ - } - - /* "dataRead.pyx":489 - * else: - * return buf.byteswap() - * elif n_bytes == 4: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - __pyx_t_6 = (__pyx_v_n_bytes == 4); - if (__pyx_t_6) { + __pyx_L72_next_or:; - /* "dataRead.pyx":490 - * return buf.byteswap() - * elif n_bytes == 4: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":641 + * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< + * return read_signed_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 641, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + } else { + __pyx_t_3 = __pyx_t_5; + goto __pyx_L71_bool_binop_done; + } + __pyx_t_5 = (__pyx_v_signal_data_type == 3); + __pyx_t_3 = __pyx_t_5; + __pyx_L71_bool_binop_done:; - /* "dataRead.pyx":491 - * elif n_bytes == 4: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift + /* "dataRead.pyx":640 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_longlong(bit_stream, record_format, number_of_records, */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + if (__pyx_t_3) { - /* "dataRead.pyx":492 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":642 + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + * else: # swap bytes */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":494 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":643 + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_signed_longlong(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 642, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":495 - * # right shift - * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 32: + /* "dataRead.pyx":640 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long + * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 3): + * return read_signed_longlong(bit_stream, record_format, number_of_records, */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + } - /* "dataRead.pyx":494 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":645 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) + * else: # swap bytes + * return read_signed_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (15, 16): # complex */ - } + /*else*/ { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":497 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * buf[i] = temp4byte + /* "dataRead.pyx":646 + * else: # swap bytes + * return read_signed_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< + * elif signal_data_type in (15, 16): # complex + * if (byteorder == 'little' and signal_data_type == 15) or \ */ - __pyx_t_6 = (__pyx_v_bit_count < 32); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":498 - * # mask left part - * if bit_count < 32: - * temp4byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * else: + /* "dataRead.pyx":639 + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 2) or \ + * (byteorder == 'big' and signal_data_type == 3): */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); + } - /* "dataRead.pyx":497 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * buf[i] = temp4byte + /* "dataRead.pyx":647 + * return read_signed_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (15, 16): # complex # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 15) or \ + * (byteorder == 'big' and signal_data_type == 16): */ - } + switch (__pyx_v_signal_data_type) { + case 15: + case 16: + __pyx_t_3 = 1; + break; + default: + __pyx_t_3 = 0; + break; + } + __pyx_t_5 = __pyx_t_3; + if (__pyx_t_5) { - /* "dataRead.pyx":499 - * if bit_count < 32: - * temp4byte &= mask - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":648 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (15, 16): # complex + * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 16): + * swap_flag = 0 */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 648, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_3) { + goto __pyx_L77_next_or; + } else { } + __pyx_t_3 = (__pyx_v_signal_data_type == 15); + if (!__pyx_t_3) { + } else { + __pyx_t_5 = __pyx_t_3; + goto __pyx_L76_bool_binop_done; + } + __pyx_L77_next_or:; - /* "dataRead.pyx":490 - * return buf.byteswap() - * elif n_bytes == 4: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":649 + * elif signal_data_type in (15, 16): # complex + * if (byteorder == 'little' and signal_data_type == 15) or \ + * (byteorder == 'big' and signal_data_type == 16): # <<<<<<<<<<<<<< + * swap_flag = 0 + * else: # swap bytes */ - goto __pyx_L7; - } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_3) { + } else { + __pyx_t_5 = __pyx_t_3; + goto __pyx_L76_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_signal_data_type == 16); + __pyx_t_5 = __pyx_t_3; + __pyx_L76_bool_binop_done:; - /* "dataRead.pyx":501 - * buf[i] = temp4byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + /* "dataRead.pyx":648 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (15, 16): # complex + * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 16): + * swap_flag = 0 */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + if (__pyx_t_5) { - /* "dataRead.pyx":502 - * else: - * for i in range(number_of_records): - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes - * # right shift + /* "dataRead.pyx":650 + * if (byteorder == 'little' and signal_data_type == 15) or \ + * (byteorder == 'big' and signal_data_type == 16): + * swap_flag = 0 # <<<<<<<<<<<<<< + * else: # swap bytes + * swap_flag = 1 */ - (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __pyx_v_swap_flag = 0; - /* "dataRead.pyx":503 - * for i in range(number_of_records): - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":648 + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (15, 16): # complex + * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type == 16): + * swap_flag = 0 */ - __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); + goto __pyx_L75; + } - /* "dataRead.pyx":505 - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":652 + * swap_flag = 0 + * else: # swap bytes + * swap_flag = 1 # <<<<<<<<<<<<<< + * if n_bytes == 16: + * return read_cdouble(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + /*else*/ { + __pyx_v_swap_flag = 1; + } + __pyx_L75:; - /* "dataRead.pyx":506 - * # right shift - * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 32: + /* "dataRead.pyx":653 + * else: # swap bytes + * swap_flag = 1 + * if n_bytes == 16: # <<<<<<<<<<<<<< + * return read_cdouble(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + switch (__pyx_v_n_bytes) { + case 16: - /* "dataRead.pyx":505 - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":654 + * swap_flag = 1 + * if n_bytes == 16: + * return read_cdouble(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes == 8: */ - } + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":508 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * buf[i] = temp4byte + /* "dataRead.pyx":655 + * if n_bytes == 16: + * return read_cdouble(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * elif n_bytes == 8: + * return read_cfloat(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_count < 32); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_cdouble(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 654, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":509 - * # mask left part - * if bit_count < 32: - * temp4byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * return buf + /* "dataRead.pyx":653 + * else: # swap bytes + * swap_flag = 1 + * if n_bytes == 16: # <<<<<<<<<<<<<< + * return read_cdouble(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); + break; + case 8: - /* "dataRead.pyx":508 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * buf[i] = temp4byte + /* "dataRead.pyx":657 + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes == 8: + * return read_cfloat(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes == 4: */ - } + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":510 - * if bit_count < 32: - * temp4byte &= mask - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * return buf - * else: # on 3 bytes + /* "dataRead.pyx":658 + * elif n_bytes == 8: + * return read_cfloat(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * elif n_bytes == 4: + * return read_chalf(bit_stream, record_format, number_of_records, */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; - } - } - __pyx_L7:; + __pyx_t_4 = __pyx_f_8dataRead_read_cfloat(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 657, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":511 - * temp4byte &= mask - * buf[i] = temp4byte - * return buf # <<<<<<<<<<<<<< - * else: # on 3 bytes - * if swap == 0: + /* "dataRead.pyx":656 + * return read_cdouble(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes == 8: # <<<<<<<<<<<<<< + * return read_cfloat(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + break; + case 4: - /* "dataRead.pyx":489 - * else: - * return buf.byteswap() - * elif n_bytes == 4: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":660 + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes == 4: + * return read_chalf(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes <= 4: */ - } + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":513 - * return buf - * else: # on 3 bytes - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":661 + * elif n_bytes == 4: + * return read_chalf(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< + * elif n_bytes <= 4: + * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) */ - /*else*/ { - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_chalf(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":514 - * else: # on 3 bytes - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift + /* "dataRead.pyx":659 + * return read_cfloat(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes == 4: # <<<<<<<<<<<<<< + * return read_chalf(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + break; + default: break; + } - /* "dataRead.pyx":515 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":647 + * return read_signed_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) + * elif signal_data_type in (15, 16): # complex # <<<<<<<<<<<<<< + * if (byteorder == 'little' and signal_data_type == 15) or \ + * (byteorder == 'big' and signal_data_type == 16): */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + goto __pyx_L4; + } - /* "dataRead.pyx":517 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":662 + * return read_chalf(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes <= 4: # <<<<<<<<<<<<<< + * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) + * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __pyx_t_5 = (__pyx_v_n_bytes <= 4); + if (__pyx_t_5) { - /* "dataRead.pyx":518 - * # right shift - * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 24: + /* "dataRead.pyx":664 + * elif n_bytes <= 4: + * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) + * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + * 0 if byteorder == 'little' else 1) */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":517 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":666 + * return read_unsigned_int(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + * 0 if byteorder == 'little' else 1) # <<<<<<<<<<<<<< + * elif n_bytes <= 8: + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - } + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 666, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 666, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + __pyx_t_6 = 0; + } else { + __pyx_t_6 = 1; + } - /* "dataRead.pyx":520 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * buf[i] = temp4byte + /* "dataRead.pyx":664 + * elif n_bytes <= 4: + * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) + * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + * 0 if byteorder == 'little' else 1) */ - __pyx_t_6 = (__pyx_v_bit_count < 24); - if (__pyx_t_6) { + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 664, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":521 - * # mask left part - * if bit_count < 24: - * temp4byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * else: + /* "dataRead.pyx":662 + * return read_chalf(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, 0) + * elif n_bytes <= 4: # <<<<<<<<<<<<<< + * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) + * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); + } - /* "dataRead.pyx":520 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * buf[i] = temp4byte + /* "dataRead.pyx":667 + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + * 0 if byteorder == 'little' else 1) + * elif n_bytes <= 8: # <<<<<<<<<<<<<< + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, */ - } + __pyx_t_5 = (__pyx_v_n_bytes <= 8); + if (__pyx_t_5) { - /* "dataRead.pyx":522 - * if bit_count < 24: - * temp4byte &= mask - * buf[i] = temp4byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":668 + * 0 if byteorder == 'little' else 1) + * elif n_bytes <= 8: + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + * 0 if byteorder == 'little' else 1) + */ + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":670 + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + * 0 if byteorder == 'little' else 1) # <<<<<<<<<<<<<< * else: - * for i in range(number_of_records): + * return read_byte(bit_stream, record_format, number_of_records, */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + __pyx_t_6 = 0; + } else { + __pyx_t_6 = 1; } - /* "dataRead.pyx":513 - * return buf - * else: # on 3 bytes - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":668 + * 0 if byteorder == 'little' else 1) + * elif n_bytes <= 8: + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + * 0 if byteorder == 'little' else 1) + */ + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 668, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "dataRead.pyx":667 + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, + * 0 if byteorder == 'little' else 1) + * elif n_bytes <= 8: # <<<<<<<<<<<<<< + * return read_unsigned_longlong(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, */ - goto __pyx_L16; } - /* "dataRead.pyx":524 - * buf[i] = temp4byte + /* "dataRead.pyx":672 + * 0 if byteorder == 'little' else 1) * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * else: # array */ /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":525 + /* "dataRead.pyx":673 * else: - * for i in range(number_of_records): - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes - * # right shift + * return read_byte(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< + * else: # array + * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ */ - (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 672, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + __pyx_L4:; - /* "dataRead.pyx":526 - * for i in range(number_of_records): - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":565 + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * if not array: # <<<<<<<<<<<<<< + * if 'V' in record_format or 'S' in record_format or record_format is None: + * return read_byte(bit_stream, record_format, number_of_records, */ - __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); + goto __pyx_L3; + } - /* "dataRead.pyx":528 - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":675 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * else: # array + * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type in (1, 3, 5)): + * return read_array(bit_stream, record_format, number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 675, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 675, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (!__pyx_t_3) { + goto __pyx_L82_next_or; + } else { + } + switch (__pyx_v_signal_data_type) { + case 0: + case 2: + case 4: + __pyx_t_3 = 1; + break; + default: + __pyx_t_3 = 0; + break; + } + __pyx_t_2 = __pyx_t_3; + if (!__pyx_t_2) { + } else { + __pyx_t_5 = __pyx_t_2; + goto __pyx_L81_bool_binop_done; + } + __pyx_L82_next_or:; - /* "dataRead.pyx":529 - * # right shift - * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 24: + /* "dataRead.pyx":676 + * else: # array + * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ + * (byteorder == 'big' and signal_data_type in (1, 3, 5)): # <<<<<<<<<<<<<< + * return read_array(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 676, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 676, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + } else { + __pyx_t_5 = __pyx_t_2; + goto __pyx_L81_bool_binop_done; + } + switch (__pyx_v_signal_data_type) { + case 1: + case 3: + case 5: + __pyx_t_2 = 1; + break; + default: + __pyx_t_2 = 0; + break; + } + __pyx_t_3 = __pyx_t_2; + __pyx_t_5 = __pyx_t_3; + __pyx_L81_bool_binop_done:; - /* "dataRead.pyx":528 - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":675 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * else: # array + * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type in (1, 3, 5)): + * return read_array(bit_stream, record_format, number_of_records, */ - } + if (__pyx_t_5) { - /* "dataRead.pyx":531 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * buf[i] = temp4byte + /* "dataRead.pyx":677 + * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ + * (byteorder == 'big' and signal_data_type in (1, 3, 5)): + * return read_array(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) + * else: # swap bytes */ - __pyx_t_6 = (__pyx_v_bit_count < 24); - if (__pyx_t_6) { + __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":532 - * # mask left part - * if bit_count < 24: - * temp4byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * return buf + /* "dataRead.pyx":678 + * (byteorder == 'big' and signal_data_type in (1, 3, 5)): + * return read_array(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< + * else: # swap bytes + * return read_array(bit_stream, record_format, number_of_records, */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); + __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 677, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; - /* "dataRead.pyx":531 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * buf[i] = temp4byte + /* "dataRead.pyx":675 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) + * else: # array + * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< + * (byteorder == 'big' and signal_data_type in (1, 3, 5)): + * return read_array(bit_stream, record_format, number_of_records, */ - } + } - /* "dataRead.pyx":533 - * if bit_count < 24: - * temp4byte &= mask - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * return buf + /* "dataRead.pyx":680 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) + * else: # swap bytes + * return read_array(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) * */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; - } + /*else*/ { + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":681 + * else: # swap bytes + * return read_array(bit_stream, record_format, number_of_records, + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< + * + * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, + */ + __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 680, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; } - __pyx_L16:; + } + __pyx_L3:; - /* "dataRead.pyx":534 - * temp4byte &= mask - * buf[i] = temp4byte - * return buf # <<<<<<<<<<<<<< + /* "dataRead.pyx":527 * * + * @cython.boundscheck(False) # <<<<<<<<<<<<<< + * @cython.wraparound(False) + * def sorted_data_read(bytes tmp, unsigned short bit_count, + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dataRead.sorted_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":683 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) + * + * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_bit_stream, CYTHON_UNUSED PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { + __Pyx_memviewslice __pyx_v_buf = { 0, 0, { 0 }, { 0 }, { 0 } }; + unsigned PY_LONG_LONG __pyx_v_i; + uint16_t __pyx_v_temp_uint16; + 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; + PyObject *__pyx_t_5 = NULL; + __Pyx_memviewslice __pyx_t_6 = { 0, 0, { 0 }, { 0 }, { 0 } }; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + int __pyx_t_11; + unsigned int __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_half", 1); + + /* "dataRead.pyx":685 + * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_uint16_t(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_buf = __pyx_t_6; + __pyx_t_6.memview = NULL; + __pyx_t_6.data = NULL; + + /* "dataRead.pyx":687 + * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) + * cdef unsigned long long i + * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + */ + __pyx_v_temp_uint16 = 0; + + /* "dataRead.pyx":688 + * cdef unsigned long long i + * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp_uint16 + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":689 + * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing + * for i in range(number_of_records): + * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * buf[i] = temp_uint16 + * if swap == 0: + */ + (void)(memcpy((&__pyx_v_temp_uint16), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); + + /* "dataRead.pyx":690 + * for i in range(number_of_records): + * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp_uint16 # <<<<<<<<<<<<<< + * if swap == 0: + * return np.asarray(buf).view(dtype=np.float16) + */ + __pyx_t_10 = __pyx_v_i; + *((uint16_t *) ( /* dim=0 */ (__pyx_v_buf.data + __pyx_t_10 * __pyx_v_buf.strides[0]) )) = __pyx_v_temp_uint16; + } + + /* "dataRead.pyx":691 + * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp_uint16 + * if swap == 0: # <<<<<<<<<<<<<< + * return np.asarray(buf).view(dtype=np.float16) + * else: + */ + __pyx_t_11 = (__pyx_v_swap == 0); + if (__pyx_t_11) { + + /* "dataRead.pyx":692 + * buf[i] = temp_uint16 + * if swap == 0: + * return np.asarray(buf).view(dtype=np.float16) # <<<<<<<<<<<<<< + * else: + * return np.asarray(buf).view(dtype=np.float16).byteswap() */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_1}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; goto __pyx_L0; + + /* "dataRead.pyx":691 + * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp_uint16 + * if swap == 0: # <<<<<<<<<<<<<< + * return np.asarray(buf).view(dtype=np.float16) + * else: + */ } - /* "dataRead.pyx":472 - * return buf + /* "dataRead.pyx":694 + * return np.asarray(buf).view(dtype=np.float16) + * else: + * return np.asarray(buf).view(dtype=np.float16).byteswap() # <<<<<<<<<<<<<< * - * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_3}; + __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_12 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_12 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 0+__pyx_t_12); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":683 + * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) + * + * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) */ /* function exit code */ @@ -28678,42 +30200,28 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_unsigned_int", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_5); + __PYX_XCLEAR_MEMVIEW(&__pyx_t_6, 1); + __Pyx_AddTraceback("dataRead.read_half", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; - goto __pyx_L2; __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __PYX_XCLEAR_MEMVIEW(&__pyx_v_buf, 1); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":537 - * +/* "dataRead.pyx":696 + * return np.asarray(buf).view(dtype=np.float16).byteswap() * - * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * # complex32 = real(f16) + imag(f16): return as (n_records, 2) float16 array */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_bit_stream, CYTHON_UNUSED PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; - unsigned int __pyx_v_mask; - int __pyx_v_temp4byte; - unsigned int __pyx_v_sign_bit; - unsigned int __pyx_v_sign_bit_mask; - unsigned int __pyx_v_sign_extend; - unsigned char __pyx_v_temp4[4]; - unsigned char __pyx_v_temp3[3]; __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; __Pyx_Buffer __pyx_pybuffer_buf; PyObject *__pyx_r = NULL; @@ -28722,852 +30230,661 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - PyArrayObject *__pyx_t_5 = NULL; - int __pyx_t_6; + PyObject *__pyx_t_5 = NULL; + PyArrayObject *__pyx_t_6 = NULL; unsigned PY_LONG_LONG __pyx_t_7; unsigned PY_LONG_LONG __pyx_t_8; unsigned PY_LONG_LONG __pyx_t_9; unsigned PY_LONG_LONG __pyx_t_10; - unsigned int __pyx_t_11; + Py_ssize_t __pyx_t_11; + int __pyx_t_12; + unsigned int __pyx_t_13; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_signed_int", 1); + __Pyx_RefNannySetupContext("read_chalf", 1); __pyx_pybuffer_buf.pybuffer.buf = NULL; __pyx_pybuffer_buf.refcount = 0; __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":540 - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + /* "dataRead.pyx":699 + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * # complex32 = real(f16) + imag(f16): return as (n_records, 2) float16 array + * cdef np.ndarray[np.uint16_t, ndim=2] buf = np.empty((number_of_records, 2), dtype=np.uint16) # <<<<<<<<<<<<<< * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) + * for i in range(number_of_records): */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 540, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error); + __Pyx_INCREF(__pyx_int_2); + __Pyx_GIVEREF(__pyx_int_2); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2)) __PYX_ERR(0, 699, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 540, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 540, __pyx_L1_error) + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 699, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 540, __pyx_L1_error) - __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 540, __pyx_L1_error) - } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + __PYX_ERR(0, 699, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_buf.diminfo[1].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_buf.diminfo[1].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[1]; } } + __pyx_t_6 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; - /* "dataRead.pyx":542 - * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":701 + * cdef np.ndarray[np.uint16_t, ndim=2] buf = np.empty((number_of_records, 2), dtype=np.uint16) * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef int temp4byte = 0 - * cdef unsigned int sign_bit = 0 + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":543 + /* "dataRead.pyx":702 * cdef unsigned long long i - * cdef unsigned int mask = ((1 << bit_count) - 1) - * cdef int temp4byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned int sign_bit = 0 - * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) - */ - __pyx_v_temp4byte = 0; - - /* "dataRead.pyx":544 - * cdef unsigned int mask = ((1 << bit_count) - 1) - * cdef int temp4byte = 0 - * cdef unsigned int sign_bit = 0 # <<<<<<<<<<<<<< - * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count - */ - __pyx_v_sign_bit = 0; - - /* "dataRead.pyx":545 - * cdef int temp4byte = 0 - * cdef unsigned int sign_bit = 0 - * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< - * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count - * cdef unsigned char temp4[4] - */ - __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - - /* "dataRead.pyx":546 - * cdef unsigned int sign_bit = 0 - * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] + * for i in range(number_of_records): + * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) + * if swap == 0: */ - __pyx_v_sign_extend = (((1 << (32 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 0; + if (__pyx_t_11 < 0) __pyx_t_11 += __pyx_pybuffernd_buf.diminfo[1].shape; + (void)(memcpy((&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_buf.diminfo[1].strides))), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":549 - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] - * if bit_count == 32: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + /* "dataRead.pyx":703 + * for i in range(number_of_records): + * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) # <<<<<<<<<<<<<< + * if swap == 0: + * return buf.view(dtype=np.float16) */ - __pyx_t_6 = (__pyx_v_bit_count == 32); - if (__pyx_t_6) { + __pyx_t_10 = __pyx_v_i; + __pyx_t_11 = 1; + if (__pyx_t_11 < 0) __pyx_t_11 += __pyx_pybuffernd_buf.diminfo[1].shape; + (void)(memcpy((&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_buf.diminfo[1].strides))), (&(__pyx_v_bit_stream[((__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)) + 2)])), 2)); + } - /* "dataRead.pyx":550 - * cdef unsigned char temp3[3] - * if bit_count == 32: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte + /* "dataRead.pyx":704 + * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) + * if swap == 0: # <<<<<<<<<<<<<< + * return buf.view(dtype=np.float16) + * else: */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_12 = (__pyx_v_swap == 0); + if (__pyx_t_12) { - /* "dataRead.pyx":551 - * if bit_count == 32: - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * if swap == 0: + /* "dataRead.pyx":705 + * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) + * if swap == 0: + * return buf.view(dtype=np.float16) # <<<<<<<<<<<<<< + * else: + * return buf.view(dtype=np.float16).byteswap() */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); + __Pyx_XDECREF(__pyx_r); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; - /* "dataRead.pyx":552 - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":704 + * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) + * if swap == 0: # <<<<<<<<<<<<<< + * return buf.view(dtype=np.float16) + * else: */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; - } + } - /* "dataRead.pyx":553 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":707 + * return buf.view(dtype=np.float16) + * else: + * return buf.view(dtype=np.float16).byteswap() # <<<<<<<<<<<<<< + * + * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = NULL; + __pyx_t_13 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_13 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_13, 0+__pyx_t_13); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":554 - * buf[i] = temp4byte - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":696 + * return np.asarray(buf).view(dtype=np.float16).byteswap() + * + * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * # complex32 = real(f16) + imag(f16): return as (n_records, 2) float16 array */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; - /* "dataRead.pyx":553 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) - * buf[i] = temp4byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: - */ - } + /* 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_5); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_chalf", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":556 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * elif n_bytes == 4: - * if swap == 0: +/* "dataRead.pyx":709 + * return buf.view(dtype=np.float16).byteswap() + * + * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 556, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - /* "dataRead.pyx":549 - * cdef unsigned char temp4[4] - * cdef unsigned char temp3[3] - * if bit_count == 32: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + float __pyx_v_temp_float; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + unsigned PY_LONG_LONG __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + int __pyx_t_10; + unsigned int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_float", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + + /* "dataRead.pyx":711 + * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef float temp_float = 0 */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 711, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 711, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 711, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":557 - * else: - * return buf.byteswap() - * elif n_bytes == 4: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":713 + * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef float temp_float = 0 # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) */ - __pyx_t_6 = (__pyx_v_n_bytes == 4); - if (__pyx_t_6) { + __pyx_v_temp_float = 0.0; - /* "dataRead.pyx":558 - * return buf.byteswap() - * elif n_bytes == 4: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":714 + * cdef unsigned long long i + * cdef float temp_float = 0 + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp_float */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + __pyx_t_6 = __pyx_v_number_of_records; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":559 - * elif n_bytes == 4: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift + /* "dataRead.pyx":715 + * cdef float temp_float = 0 + * for i in range(number_of_records): + * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< + * buf[i] = temp_float + * if swap == 0: */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + (void)(memcpy((&__pyx_v_temp_float), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); - /* "dataRead.pyx":560 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":716 + * for i in range(number_of_records): + * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp_float # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __pyx_t_9 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_float; + } - /* "dataRead.pyx":562 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":717 + * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp_float + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __pyx_t_10 = (__pyx_v_swap == 0); + if (__pyx_t_10) { - /* "dataRead.pyx":563 - * # right shift - * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 32: + /* "dataRead.pyx":718 + * buf[i] = temp_float + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":562 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part + /* "dataRead.pyx":717 + * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp_float + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - } + } - /* "dataRead.pyx":565 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + /* "dataRead.pyx":720 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * + * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_count < 32); - if (__pyx_t_6) { + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 720, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 720, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":566 - * # mask left part - * if bit_count < 32: - * temp4byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":709 + * return buf.view(dtype=np.float16).byteswap() + * + * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":565 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - } + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_float", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":567 - * if bit_count < 32: - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend +/* "dataRead.pyx":722 + * return buf.byteswap() + * + * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ - __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":568 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + __pyx_t_float_complex __pyx_v_temp_cfloat; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + unsigned PY_LONG_LONG __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + int __pyx_t_10; + unsigned int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_cfloat", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + + /* "dataRead.pyx":724 + * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef float complex temp_cfloat = 0 */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 724, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 724, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 724, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 724, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo___pyx_t_float_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 724, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":569 - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * else: + /* "dataRead.pyx":726 + * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef float complex temp_cfloat = 0 # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) */ - __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + __pyx_v_temp_cfloat = __pyx_t_float_complex_from_parts(0, 0); - /* "dataRead.pyx":568 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte + /* "dataRead.pyx":727 + * cdef unsigned long long i + * cdef float complex temp_cfloat = 0 + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + * buf[i] = temp_cfloat */ - } + __pyx_t_6 = __pyx_v_number_of_records; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":570 - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":728 + * cdef float complex temp_cfloat = 0 + * for i in range(number_of_records): + * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) # <<<<<<<<<<<<<< + * buf[i] = temp_cfloat + * if swap == 0: */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; - } + (void)(memcpy((&__pyx_v_temp_cfloat), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 8)); - /* "dataRead.pyx":558 - * return buf.byteswap() - * elif n_bytes == 4: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":729 + * for i in range(number_of_records): + * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + * buf[i] = temp_cfloat # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - goto __pyx_L7; - } + __pyx_t_9 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_float_complex *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_cfloat; + } - /* "dataRead.pyx":572 - * buf[i] = temp4byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + /* "dataRead.pyx":730 + * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + * buf[i] = temp_cfloat + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_10 = (__pyx_v_swap == 0); + if (__pyx_t_10) { - /* "dataRead.pyx":573 - * else: - * for i in range(number_of_records): - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes - * # right shift - */ - (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":574 - * for i in range(number_of_records): - * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); - - /* "dataRead.pyx":576 - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":577 - * # right shift - * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 32: - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":576 - * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part - */ - } - - /* "dataRead.pyx":579 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - __pyx_t_6 = (__pyx_v_bit_count < 32); - if (__pyx_t_6) { - - /* "dataRead.pyx":580 - * # mask left part - * if bit_count < 32: - * temp4byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - - /* "dataRead.pyx":579 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - } - - /* "dataRead.pyx":581 - * if bit_count < 32: - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":582 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":583 - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * return buf - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - - /* "dataRead.pyx":582 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - } - - /* "dataRead.pyx":584 - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * return buf - * else: # on 3 bytes - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; - } - } - __pyx_L7:; - - /* "dataRead.pyx":585 - * temp4byte |= sign_extend - * buf[i] = temp4byte + /* "dataRead.pyx":731 + * buf[i] = temp_cfloat + * if swap == 0: * return buf # <<<<<<<<<<<<<< - * else: # on 3 bytes - * if swap == 0: + * else: + * return buf.byteswap() */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_buf); __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":557 - * else: - * return buf.byteswap() - * elif n_bytes == 4: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":730 + * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + * buf[i] = temp_cfloat + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ } - /* "dataRead.pyx":587 + /* "dataRead.pyx":733 * return buf - * else: # on 3 bytes - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * + * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, */ /*else*/ { - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":588 - * else: # on 3 bytes - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":589 - * if swap == 0: - * for i in range(number_of_records): - * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF # <<<<<<<<<<<<<< - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - */ - __pyx_v_temp4byte = 0; - - /* "dataRead.pyx":590 - * for i in range(number_of_records): - * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":592 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":593 - * # right shift - * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 24: - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":592 - * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part - */ - } - - /* "dataRead.pyx":595 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - __pyx_t_6 = (__pyx_v_bit_count < 24); - if (__pyx_t_6) { - - /* "dataRead.pyx":596 - * # mask left part - * if bit_count < 24: - * temp4byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - - /* "dataRead.pyx":595 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - } - - /* "dataRead.pyx":597 - * if bit_count < 24: - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":598 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":599 - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * else: - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - - /* "dataRead.pyx":598 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - } - - /* "dataRead.pyx":600 - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 733, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; } - - /* "dataRead.pyx":587 - * return buf - * else: # on 3 bytes - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF - */ - goto __pyx_L18; } - - /* "dataRead.pyx":602 - * buf[i] = temp4byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes - */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":603 - * else: - * for i in range(number_of_records): - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes - * # right shift - */ - (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":604 - * for i in range(number_of_records): - * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); - - /* "dataRead.pyx":606 - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":607 - * # right shift - * if bit_offset > 0: - * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 24: - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":606 - * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp4byte = temp4byte >> bit_offset - * # mask left part - */ - } - - /* "dataRead.pyx":609 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - __pyx_t_6 = (__pyx_v_bit_count < 24); - if (__pyx_t_6) { - - /* "dataRead.pyx":610 - * # mask left part - * if bit_count < 24: - * temp4byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - - /* "dataRead.pyx":609 - * temp4byte = temp4byte >> bit_offset - * # mask left part - * if bit_count < 24: # <<<<<<<<<<<<<< - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - */ - } - - /* "dataRead.pyx":611 - * if bit_count < 24: - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":612 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":613 - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp4byte - * return buf - */ - __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - - /* "dataRead.pyx":612 - * temp4byte &= mask - * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp4byte |= sign_extend - * buf[i] = temp4byte - */ - } - - /* "dataRead.pyx":614 - * if sign_bit: # negative value, sign extend - * temp4byte |= sign_extend - * buf[i] = temp4byte # <<<<<<<<<<<<<< - * return buf - * - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; - } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 733, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __pyx_L18:; - - /* "dataRead.pyx":615 - * temp4byte |= sign_extend - * buf[i] = temp4byte - * return buf # <<<<<<<<<<<<<< - * - * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":537 - * + /* "dataRead.pyx":722 + * return buf.byteswap() * - * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ /* function exit code */ @@ -29582,7 +30899,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_signed_int", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.read_cfloat", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; @@ -29594,23 +30911,18 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p return __pyx_r; } -/* "dataRead.pyx":617 - * return buf +/* "dataRead.pyx":735 + * return buf.byteswap() * - * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; - unsigned PY_LONG_LONG __pyx_v_mask; - unsigned PY_LONG_LONG __pyx_v_temp8byte; - unsigned char __pyx_v_temp8[8]; - unsigned char __pyx_v_temp7[7]; - unsigned char __pyx_v_temp6[6]; - unsigned char __pyx_v_temp5[5]; + double __pyx_v_temp_double; __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; __Pyx_Buffer __pyx_pybuffer_buf; PyObject *__pyx_r = NULL; @@ -29620,55 +30932,55 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; PyArrayObject *__pyx_t_5 = NULL; - int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_6; unsigned PY_LONG_LONG __pyx_t_7; unsigned PY_LONG_LONG __pyx_t_8; unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; + int __pyx_t_10; unsigned int __pyx_t_11; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_unsigned_longlong", 1); + __Pyx_RefNannySetupContext("read_double", 1); __pyx_pybuffer_buf.pybuffer.buf = NULL; __pyx_pybuffer_buf.refcount = 0; __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":620 - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + /* "dataRead.pyx":737 + * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) + * cdef double temp_double = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 620, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 620, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 620, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 620, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 620, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 620, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 620, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 620, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 737, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 620, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 737, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 620, __pyx_L1_error) + __PYX_ERR(0, 737, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -29676,1074 +30988,934 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":622 - * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":739 + * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef unsigned long long temp8byte = 0 - * cdef unsigned char temp8[8] + * cdef double temp_double = 0 # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) */ - __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + __pyx_v_temp_double = 0.0; - /* "dataRead.pyx":623 + /* "dataRead.pyx":740 * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) - * cdef unsigned long long temp8byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned char temp8[8] - * cdef unsigned char temp7[7] - */ - __pyx_v_temp8byte = 0; - - /* "dataRead.pyx":628 - * cdef unsigned char temp6[6] - * cdef unsigned char temp5[5] - * if bit_count == 64: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * cdef double temp_double = 0 + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + * buf[i] = temp_double */ - __pyx_t_6 = (__pyx_v_bit_count == 64); - if (__pyx_t_6) { + __pyx_t_6 = __pyx_v_number_of_records; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":629 - * cdef unsigned char temp5[5] - * if bit_count == 64: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":630 - * if bit_count == 64: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * if swap == 0: + /* "dataRead.pyx":741 + * cdef double temp_double = 0 + * for i in range(number_of_records): + * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) # <<<<<<<<<<<<<< + * buf[i] = temp_double + * if swap == 0: */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp_double), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 8)); - /* "dataRead.pyx":631 - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":742 + * for i in range(number_of_records): + * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + * buf[i] = temp_double # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } + __pyx_t_9 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_double; + } - /* "dataRead.pyx":632 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":743 + * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + * buf[i] = temp_double + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + __pyx_t_10 = (__pyx_v_swap == 0); + if (__pyx_t_10) { - /* "dataRead.pyx":633 - * buf[i] = temp8byte - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":744 + * buf[i] = temp_double + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":632 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":743 + * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) + * buf[i] = temp_double + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - } + } - /* "dataRead.pyx":635 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * elif n_bytes == 8: - * if swap == 0: + /* "dataRead.pyx":746 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * + * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = NULL; - __pyx_t_11 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - __pyx_t_11 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 635, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; } - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; } - - /* "dataRead.pyx":628 - * cdef unsigned char temp6[6] - * cdef unsigned char temp5[5] - * if bit_count == 64: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 746, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; } - /* "dataRead.pyx":636 - * else: - * return buf.byteswap() - * elif n_bytes == 8: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":735 + * return buf.byteswap() + * + * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ - __pyx_t_6 = (__pyx_v_n_bytes == 8); - if (__pyx_t_6) { - /* "dataRead.pyx":637 - * return buf.byteswap() - * elif n_bytes == 8: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_double", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":638 - * elif n_bytes == 8: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift +/* "dataRead.pyx":748 + * return buf.byteswap() + * + * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":639 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + __pyx_t_double_complex __pyx_v_temp_cdouble; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + unsigned PY_LONG_LONG __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + int __pyx_t_10; + unsigned int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_cdouble", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":641 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":750 + * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef double complex temp_cdouble = 0 */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 750, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 750, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 750, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":642 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 64: + /* "dataRead.pyx":752 + * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef double complex temp_cdouble = 0 # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp_cdouble = __pyx_t_double_complex_from_parts(0, 0); - /* "dataRead.pyx":641 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":753 + * cdef unsigned long long i + * cdef double complex temp_cdouble = 0 + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) + * buf[i] = temp_cdouble */ - } + __pyx_t_6 = __pyx_v_number_of_records; + __pyx_t_7 = __pyx_t_6; + for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { + __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":644 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":754 + * cdef double complex temp_cdouble = 0 + * for i in range(number_of_records): + * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) # <<<<<<<<<<<<<< + * buf[i] = temp_cdouble + * if swap == 0: */ - __pyx_t_6 = (__pyx_v_bit_count < 64); - if (__pyx_t_6) { + (void)(memcpy((&__pyx_v_temp_cdouble), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 16)); - /* "dataRead.pyx":645 - * # mask left part - * if bit_count < 64: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + /* "dataRead.pyx":755 + * for i in range(number_of_records): + * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) + * buf[i] = temp_cdouble # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_t_9 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_cdouble; + } - /* "dataRead.pyx":644 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":756 + * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) + * buf[i] = temp_cdouble + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - } + __pyx_t_10 = (__pyx_v_swap == 0); + if (__pyx_t_10) { - /* "dataRead.pyx":646 - * if bit_count < 64: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":757 + * buf[i] = temp_cdouble + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":637 - * return buf.byteswap() - * elif n_bytes == 8: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":756 + * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) + * buf[i] = temp_cdouble + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - goto __pyx_L7; - } + } - /* "dataRead.pyx":648 - * buf[i] = temp8byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + /* "dataRead.pyx":759 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * + * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 759, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":649 - * else: - * for i in range(number_of_records): - * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - * temp8[2]<<40 | temp8[3]<<32 | \ + /* "dataRead.pyx":748 + * return buf.byteswap() + * + * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): + * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array */ - (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":652 - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - * temp8[2]<<40 | temp8[3]<<32 | \ - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_cdouble", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":654 - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part +/* "dataRead.pyx":761 + * return buf.byteswap() + * + * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset): */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - /* "dataRead.pyx":655 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 64: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned char __pyx_v_mask; + unsigned char __pyx_v_temp1byte; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_unsigned_char", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":654 - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":764 + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset): + * cdef np.ndarray[np.uint8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned char mask = ((1 << bit_count) - 1) */ - } + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 764, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 764, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 764, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":657 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":766 + * cdef np.ndarray[np.uint8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned char mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef unsigned char temp1byte = 0 + * if bit_count == 8: */ - __pyx_t_6 = (__pyx_v_bit_count < 64); - if (__pyx_t_6) { + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":658 - * # mask left part - * if bit_count < 64: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 7: + /* "dataRead.pyx":767 + * cdef unsigned long long i + * cdef unsigned char mask = ((1 << bit_count) - 1) + * cdef unsigned char temp1byte = 0 # <<<<<<<<<<<<<< + * if bit_count == 8: + * for i in range(number_of_records): */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_temp1byte = 0; - /* "dataRead.pyx":657 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":768 + * cdef unsigned char mask = ((1 << bit_count) - 1) + * cdef unsigned char temp1byte = 0 + * if bit_count == 8: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) */ - } + __pyx_t_6 = (__pyx_v_bit_count == 8); + if (__pyx_t_6) { - /* "dataRead.pyx":659 - * if bit_count < 64: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 7: - * if swap == 0: + /* "dataRead.pyx":769 + * cdef unsigned char temp1byte = 0 + * if bit_count == 8: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * buf[i] = temp1byte */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":770 + * if bit_count == 8: + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< + * buf[i] = temp1byte + * else: + */ + (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); + + /* "dataRead.pyx":771 + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * buf[i] = temp1byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; } - __pyx_L7:; - /* "dataRead.pyx":636 - * else: - * return buf.byteswap() - * elif n_bytes == 8: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":768 + * cdef unsigned char mask = ((1 << bit_count) - 1) + * cdef unsigned char temp1byte = 0 + * if bit_count == 8: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) */ goto __pyx_L3; } - /* "dataRead.pyx":660 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 7: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":773 + * buf[i] = temp1byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * # right shift */ - __pyx_t_6 = (__pyx_v_n_bytes == 7); - if (__pyx_t_6) { + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":661 - * buf[i] = temp8byte - * elif n_bytes == 7: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":774 + * else: + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":662 - * elif n_bytes == 7: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift + /* "dataRead.pyx":776 + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp1byte = temp1byte >> bit_offset + * # mask left part */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":663 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":777 + * # right shift + * if bit_offset > 0: + * temp1byte = temp1byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * temp1byte &= mask */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __pyx_v_temp1byte = (__pyx_v_temp1byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":665 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":776 + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp1byte = temp1byte >> bit_offset + * # mask left part */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + } - /* "dataRead.pyx":666 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 56: + /* "dataRead.pyx":779 + * temp1byte = temp1byte >> bit_offset + * # mask left part + * temp1byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp1byte + * return buf */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp1byte = (__pyx_v_temp1byte & __pyx_v_mask); - /* "dataRead.pyx":665 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":780 + * # mask left part + * temp1byte &= mask + * buf[i] = temp1byte # <<<<<<<<<<<<<< + * return buf + * */ - } + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; + } + } + __pyx_L3:; - /* "dataRead.pyx":668 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":781 + * temp1byte &= mask + * buf[i] = temp1byte + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - __pyx_t_6 = (__pyx_v_bit_count < 56); - if (__pyx_t_6) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":669 - * # mask left part - * if bit_count < 56: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + /* "dataRead.pyx":761 + * return buf.byteswap() + * + * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset): */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":668 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - } + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_unsigned_char", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":670 - * if bit_count < 56: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): +/* "dataRead.pyx":783 + * return buf + * + * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset): */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - /* "dataRead.pyx":661 - * buf[i] = temp8byte - * elif n_bytes == 7: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - goto __pyx_L16; - } +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned char __pyx_v_mask; + char __pyx_v_temp1byte; + unsigned char __pyx_v_sign_bit; + unsigned char __pyx_v_sign_bit_mask; + unsigned char __pyx_v_sign_extend; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_signed_char", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":672 - * buf[i] = temp8byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + /* "dataRead.pyx":786 + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset): + * cdef np.ndarray[np.int8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned char mask = ((1 << bit_count) - 1) */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 786, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 786, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 786, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 786, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 786, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":673 - * else: - * for i in range(number_of_records): - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + /* "dataRead.pyx":788 + * cdef np.ndarray[np.int8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned char mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef char temp1byte = 0 + * cdef unsigned char sign_bit = 0 */ - (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":675 - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: + /* "dataRead.pyx":789 + * cdef unsigned long long i + * cdef unsigned char mask = ((1 << bit_count) - 1) + * cdef char temp1byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned char sign_bit = 0 + * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) */ - __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); + __pyx_v_temp1byte = 0; - /* "dataRead.pyx":677 - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":790 + * cdef unsigned char mask = ((1 << bit_count) - 1) + * cdef char temp1byte = 0 + * cdef unsigned char sign_bit = 0 # <<<<<<<<<<<<<< + * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __pyx_v_sign_bit = 0; - /* "dataRead.pyx":678 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 56: + /* "dataRead.pyx":791 + * cdef char temp1byte = 0 + * cdef unsigned char sign_bit = 0 + * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< + * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count + * if bit_count == 8: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":677 - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":792 + * cdef unsigned char sign_bit = 0 + * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< + * if bit_count == 8: + * for i in range(number_of_records): */ - } + __pyx_v_sign_extend = (((1 << (8 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":680 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":793 + * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count + * if bit_count == 8: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) */ - __pyx_t_6 = (__pyx_v_bit_count < 56); - if (__pyx_t_6) { + __pyx_t_6 = (__pyx_v_bit_count == 8); + if (__pyx_t_6) { - /* "dataRead.pyx":681 - * # mask left part - * if bit_count < 56: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 6: + /* "dataRead.pyx":794 + * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count + * if bit_count == 8: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * buf[i] = temp1byte */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":680 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":795 + * if bit_count == 8: + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< + * buf[i] = temp1byte + * else: */ - } + (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":682 - * if bit_count < 56: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 6: - * if swap == 0: + /* "dataRead.pyx":796 + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * buf[i] = temp1byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; } - __pyx_L16:; - /* "dataRead.pyx":660 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 7: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":793 + * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count + * if bit_count == 8: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) */ goto __pyx_L3; } - /* "dataRead.pyx":683 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 6: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":798 + * buf[i] = temp1byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * # right shift */ - __pyx_t_6 = (__pyx_v_n_bytes == 6); - if (__pyx_t_6) { - - /* "dataRead.pyx":684 - * buf[i] = temp8byte - * elif n_bytes == 6: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":685 - * elif n_bytes == 6: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":686 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":688 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":689 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 48: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":688 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - } - - /* "dataRead.pyx":691 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - __pyx_t_6 = (__pyx_v_bit_count < 48); - if (__pyx_t_6) { - - /* "dataRead.pyx":692 - * # mask left part - * if bit_count < 48: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - - /* "dataRead.pyx":691 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - } - - /* "dataRead.pyx":693 - * if bit_count < 48: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - - /* "dataRead.pyx":684 - * buf[i] = temp8byte - * elif n_bytes == 6: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - goto __pyx_L25; - } - - /* "dataRead.pyx":695 - * buf[i] = temp8byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":696 - * else: - * for i in range(number_of_records): - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes - */ - (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":698 - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); - - /* "dataRead.pyx":700 - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":701 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 48: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":700 - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - } - - /* "dataRead.pyx":703 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - __pyx_t_6 = (__pyx_v_bit_count < 48); - if (__pyx_t_6) { - - /* "dataRead.pyx":704 - * # mask left part - * if bit_count < 48: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 5: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - - /* "dataRead.pyx":703 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte - */ - } - - /* "dataRead.pyx":705 - * if bit_count < 48: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 5: - * if swap == 0: - */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - } - __pyx_L25:; - - /* "dataRead.pyx":683 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 6: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - goto __pyx_L3; - } - - /* "dataRead.pyx":706 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 5: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - __pyx_t_6 = (__pyx_v_n_bytes == 5); - if (__pyx_t_6) { - - /* "dataRead.pyx":707 - * buf[i] = temp8byte - * elif n_bytes == 5: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":708 - * elif n_bytes == 5: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":709 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":711 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":712 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 32: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":711 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - } + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":714 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":799 + * else: + * for i in range(number_of_records): + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_6 = (__pyx_v_bit_count < 32); - if (__pyx_t_6) { + (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":715 - * # mask left part - * if bit_count < 32: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + /* "dataRead.pyx":801 + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp1byte = temp1byte >> bit_offset + * # mask left part */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":714 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":802 + * # right shift + * if bit_offset > 0: + * temp1byte = temp1byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * temp1byte &= mask */ - } + __pyx_v_temp1byte = (__pyx_v_temp1byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":716 - * if bit_count < 32: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":801 + * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp1byte = temp1byte >> bit_offset + * # mask left part */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":707 - * buf[i] = temp8byte - * elif n_bytes == 5: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - goto __pyx_L34; - } - - /* "dataRead.pyx":718 - * buf[i] = temp8byte - * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - - /* "dataRead.pyx":719 - * else: - * for i in range(number_of_records): - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes - */ - (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":721 - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); - - /* "dataRead.pyx":723 - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":724 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 32: + /* "dataRead.pyx":804 + * temp1byte = temp1byte >> bit_offset + * # mask left part + * temp1byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp1byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp1byte = (__pyx_v_temp1byte & __pyx_v_mask); - /* "dataRead.pyx":723 - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":805 + * # mask left part + * temp1byte &= mask + * sign_bit = temp1byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp1byte |= sign_extend */ - } + __pyx_v_sign_bit = (__pyx_v_temp1byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":726 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":806 + * temp1byte &= mask + * sign_bit = temp1byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp1byte |= sign_extend + * buf[i] = temp1byte */ - __pyx_t_6 = (__pyx_v_bit_count < 32); - if (__pyx_t_6) { + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":727 - * # mask left part - * if bit_count < 32: - * temp8byte &= mask # <<<<<<<<<<<<<< - * buf[i] = temp8byte + /* "dataRead.pyx":807 + * sign_bit = temp1byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp1byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp1byte * return buf */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_temp1byte = (__pyx_v_temp1byte | __pyx_v_sign_extend); - /* "dataRead.pyx":726 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 32: # <<<<<<<<<<<<<< - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":806 + * temp1byte &= mask + * sign_bit = temp1byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp1byte |= sign_extend + * buf[i] = temp1byte */ - } + } - /* "dataRead.pyx":728 - * if bit_count < 32: - * temp8byte &= mask - * buf[i] = temp8byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":808 + * if sign_bit: # negative value, sign extend + * temp1byte |= sign_extend + * buf[i] = temp1byte # <<<<<<<<<<<<<< * return buf * */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; } - __pyx_L34:; - - /* "dataRead.pyx":706 - * temp8byte &= mask - * buf[i] = temp8byte - * elif n_bytes == 5: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ } __pyx_L3:; - /* "dataRead.pyx":729 - * temp8byte &= mask - * buf[i] = temp8byte + /* "dataRead.pyx":809 + * temp1byte |= sign_extend + * buf[i] = temp1byte * return buf # <<<<<<<<<<<<<< * - * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, + * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF((PyObject *)__pyx_v_buf); __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":617 - * return buf + /* "dataRead.pyx":783 + * return buf * - * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * unsigned long bit_count, unsigned char bit_offset): */ /* function exit code */ @@ -30758,7 +31930,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_unsigned_longlong", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_AddTraceback("dataRead.read_signed_char", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; goto __pyx_L2; __pyx_L0:; @@ -30770,26 +31942,20 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con return __pyx_r; } -/* "dataRead.pyx":731 +/* "dataRead.pyx":811 * return buf * - * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; - unsigned PY_LONG_LONG __pyx_v_mask; - PY_LONG_LONG __pyx_v_temp8byte; - unsigned long __pyx_v_sign_bit; - unsigned PY_LONG_LONG __pyx_v_sign_bit_mask; - unsigned PY_LONG_LONG __pyx_v_sign_extend; - unsigned char __pyx_v_temp8[8]; - unsigned char __pyx_v_temp7[7]; - unsigned char __pyx_v_temp6[6]; - unsigned char __pyx_v_temp5[5]; + unsigned short __pyx_v_mask; + unsigned short __pyx_v_temp2byte; + unsigned char __pyx_v_temp[2]; __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; __Pyx_Buffer __pyx_pybuffer_buf; PyObject *__pyx_r = NULL; @@ -30808,46 +31974,46 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_signed_longlong", 1); + __Pyx_RefNannySetupContext("read_unsigned_short", 1); __pyx_pybuffer_buf.pybuffer.buf = NULL; __pyx_pybuffer_buf.refcount = 0; __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":734 + /* "dataRead.pyx":814 * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): - * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) + * cdef unsigned short mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 734, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 734, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 734, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 734, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 734, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 814, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 814, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 734, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 814, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; - if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 734, __pyx_L1_error) + __PYX_ERR(0, 814, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -30855,96 +32021,69 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":736 - * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":816 + * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< - * cdef long long temp8byte = 0 - * cdef unsigned long sign_bit = 0 + * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef unsigned short temp2byte = 0 + * cdef unsigned char temp[2] */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":737 + /* "dataRead.pyx":817 * cdef unsigned long long i - * cdef unsigned long long mask = ((1 << bit_count) - 1) - * cdef long long temp8byte = 0 # <<<<<<<<<<<<<< - * cdef unsigned long sign_bit = 0 - * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned short mask = ((1 << bit_count) - 1) + * cdef unsigned short temp2byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned char temp[2] + * if bit_count == 16: */ - __pyx_v_temp8byte = 0; + __pyx_v_temp2byte = 0; - /* "dataRead.pyx":738 - * cdef unsigned long long mask = ((1 << bit_count) - 1) - * cdef long long temp8byte = 0 - * cdef unsigned long sign_bit = 0 # <<<<<<<<<<<<<< - * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count + /* "dataRead.pyx":819 + * cdef unsigned short temp2byte = 0 + * cdef unsigned char temp[2] + * if bit_count == 16: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) */ - __pyx_v_sign_bit = 0; - - /* "dataRead.pyx":739 - * cdef long long temp8byte = 0 - * cdef unsigned long sign_bit = 0 - * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< - * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count - * cdef unsigned char temp8[8] - */ - __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - - /* "dataRead.pyx":740 - * cdef unsigned long sign_bit = 0 - * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) - * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< - * cdef unsigned char temp8[8] - * cdef unsigned char temp7[7] - */ - __pyx_v_sign_extend = (((1 << (64 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - - /* "dataRead.pyx":745 - * cdef unsigned char temp6[6] - * cdef unsigned char temp5[5] - * if bit_count == 64: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - __pyx_t_6 = (__pyx_v_bit_count == 64); + __pyx_t_6 = (__pyx_v_bit_count == 16); if (__pyx_t_6) { - /* "dataRead.pyx":746 - * cdef unsigned char temp5[5] - * if bit_count == 64: + /* "dataRead.pyx":820 + * cdef unsigned char temp[2] + * if bit_count == 16: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte */ __pyx_t_7 = __pyx_v_number_of_records; __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":747 - * if bit_count == 64: + /* "dataRead.pyx":821 + * if bit_count == 16: * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * buf[i] = temp8byte + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * buf[i] = temp2byte * if swap == 0: */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":748 + /* "dataRead.pyx":822 * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte # <<<<<<<<<<<<<< + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte # <<<<<<<<<<<<<< * if swap == 0: * return buf */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":749 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte + /* "dataRead.pyx":823 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte * if swap == 0: # <<<<<<<<<<<<<< * return buf * else: @@ -30952,8 +32091,8 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":750 - * buf[i] = temp8byte + /* "dataRead.pyx":824 + * buf[i] = temp2byte * if swap == 0: * return buf # <<<<<<<<<<<<<< * else: @@ -30964,25 +32103,25 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":749 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * buf[i] = temp8byte + /* "dataRead.pyx":823 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte * if swap == 0: # <<<<<<<<<<<<<< * return buf * else: */ } - /* "dataRead.pyx":752 + /* "dataRead.pyx":826 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< - * elif n_bytes == 8: + * else: * if swap == 0: */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 752, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -31002,7 +32141,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 752, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -31011,40 +32150,31 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L0; } - /* "dataRead.pyx":745 - * cdef unsigned char temp6[6] - * cdef unsigned char temp5[5] - * if bit_count == 64: # <<<<<<<<<<<<<< + /* "dataRead.pyx":819 + * cdef unsigned short temp2byte = 0 + * cdef unsigned char temp[2] + * if bit_count == 16: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) */ } - /* "dataRead.pyx":753 - * else: - * return buf.byteswap() - * elif n_bytes == 8: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - __pyx_t_6 = (__pyx_v_n_bytes == 8); - if (__pyx_t_6) { - - /* "dataRead.pyx":754 + /* "dataRead.pyx":828 * return buf.byteswap() - * elif n_bytes == 8: + * else: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) */ + /*else*/ { __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":755 - * elif n_bytes == 8: + /* "dataRead.pyx":829 + * else: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift */ __pyx_t_7 = __pyx_v_number_of_records; @@ -31052,135 +32182,98 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":756 + /* "dataRead.pyx":830 * if swap == 0: * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":758 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":832 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp2byte = temp2byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":759 + /* "dataRead.pyx":833 * # right shift * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 64: + * if bit_count < 16: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":758 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":832 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp2byte = temp2byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":761 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":835 + * temp2byte = temp2byte >> bit_offset * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + * if bit_count < 16: # <<<<<<<<<<<<<< + * temp2byte &= mask + * buf[i] = temp2byte */ - __pyx_t_6 = (__pyx_v_bit_count < 64); + __pyx_t_6 = (__pyx_v_bit_count < 16); if (__pyx_t_6) { - /* "dataRead.pyx":762 - * # mask left part - * if bit_count < 64: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - - /* "dataRead.pyx":761 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":836 * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - } - - /* "dataRead.pyx":763 - * if bit_count < 64: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":764 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":765 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte + * if bit_count < 16: + * temp2byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp2byte * else: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - /* "dataRead.pyx":764 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":835 + * temp2byte = temp2byte >> bit_offset + * # mask left part + * if bit_count < 16: # <<<<<<<<<<<<<< + * temp2byte &= mask + * buf[i] = temp2byte */ } - /* "dataRead.pyx":766 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":837 + * if bit_count < 16: + * temp2byte &= mask + * buf[i] = temp2byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":754 + /* "dataRead.pyx":828 * return buf.byteswap() - * elif n_bytes == 8: + * else: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) */ goto __pyx_L7; } - /* "dataRead.pyx":768 - * buf[i] = temp8byte + /* "dataRead.pyx":839 + * buf[i] = temp2byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * temp2byte = temp[0]<<8 | temp[1] # swap bytes */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -31188,467 +32281,401 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":769 + /* "dataRead.pyx":840 * else: * for i in range(number_of_records): - * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - * temp8[2]<<40 | temp8[3]<<32 | \ + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * temp2byte = temp[0]<<8 | temp[1] # swap bytes + * # right shift */ - (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":772 - * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ - * temp8[2]<<40 | temp8[3]<<32 | \ - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< + /* "dataRead.pyx":841 + * for i in range(number_of_records): + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); + __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); - /* "dataRead.pyx":774 - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + /* "dataRead.pyx":843 + * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp2byte = temp2byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":775 + /* "dataRead.pyx":844 * # right shift * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 64: + * if bit_count < 16: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":774 - * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + /* "dataRead.pyx":843 + * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp2byte = temp2byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":777 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":846 + * temp2byte = temp2byte >> bit_offset * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + * if bit_count < 16: # <<<<<<<<<<<<<< + * temp2byte &= mask + * buf[i] = temp2byte */ - __pyx_t_6 = (__pyx_v_bit_count < 64); + __pyx_t_6 = (__pyx_v_bit_count < 16); if (__pyx_t_6) { - /* "dataRead.pyx":778 + /* "dataRead.pyx":847 * # mask left part - * if bit_count < 64: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + * if bit_count < 16: + * temp2byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp2byte + * return buf */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - /* "dataRead.pyx":777 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":846 + * temp2byte = temp2byte >> bit_offset * # mask left part - * if bit_count < 64: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - } - - /* "dataRead.pyx":779 - * if bit_count < 64: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":780 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":781 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 7: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - - /* "dataRead.pyx":780 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + * if bit_count < 16: # <<<<<<<<<<<<<< + * temp2byte &= mask + * buf[i] = temp2byte */ } - /* "dataRead.pyx":782 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 7: - * if swap == 0: + /* "dataRead.pyx":848 + * if bit_count < 16: + * temp2byte &= mask + * buf[i] = temp2byte # <<<<<<<<<<<<<< + * return buf + * */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } } __pyx_L7:; - /* "dataRead.pyx":753 - * else: - * return buf.byteswap() - * elif n_bytes == 8: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":849 + * temp2byte &= mask + * buf[i] = temp2byte + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - goto __pyx_L3; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; } - /* "dataRead.pyx":783 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 7: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":811 + * return buf + * + * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ - __pyx_t_6 = (__pyx_v_n_bytes == 7); - if (__pyx_t_6) { - /* "dataRead.pyx":784 - * buf[i] = temp8byte - * elif n_bytes == 7: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_unsigned_short", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":785 - * elif n_bytes == 7: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift +/* "dataRead.pyx":851 + * return buf + * + * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":786 - * if swap == 0: - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned short __pyx_v_mask; + short __pyx_v_temp2byte; + unsigned short __pyx_v_sign_bit; + unsigned short __pyx_v_sign_bit_mask; + unsigned short __pyx_v_sign_extend; + unsigned char __pyx_v_temp[2]; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_signed_short", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":788 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":854 + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned short mask = ((1 << bit_count) - 1) */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 854, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 854, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 854, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 854, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":789 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 56: + /* "dataRead.pyx":856 + * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef short temp2byte = 0 + * cdef unsigned short sign_bit = 0 */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":788 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part + /* "dataRead.pyx":857 + * cdef unsigned long long i + * cdef unsigned short mask = ((1 << bit_count) - 1) + * cdef short temp2byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned short sign_bit = 0 + * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) */ - } + __pyx_v_temp2byte = 0; - /* "dataRead.pyx":791 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":858 + * cdef unsigned short mask = ((1 << bit_count) - 1) + * cdef short temp2byte = 0 + * cdef unsigned short sign_bit = 0 # <<<<<<<<<<<<<< + * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count */ - __pyx_t_6 = (__pyx_v_bit_count < 56); - if (__pyx_t_6) { + __pyx_v_sign_bit = 0; - /* "dataRead.pyx":792 - * # mask left part - * if bit_count < 56: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + /* "dataRead.pyx":859 + * cdef short temp2byte = 0 + * cdef unsigned short sign_bit = 0 + * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count + * cdef unsigned char temp[2] */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":791 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":860 + * cdef unsigned short sign_bit = 0 + * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< + * cdef unsigned char temp[2] + * if bit_count == 16: */ - } + __pyx_v_sign_extend = (((1 << (16 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":793 - * if bit_count < 56: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":794 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":795 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * else: + /* "dataRead.pyx":862 + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count + * cdef unsigned char temp[2] + * if bit_count == 16: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_t_6 = (__pyx_v_bit_count == 16); + if (__pyx_t_6) { - /* "dataRead.pyx":794 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":863 + * cdef unsigned char temp[2] + * if bit_count == 16: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte */ - } + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":796 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * else: - * for i in range(number_of_records): + /* "dataRead.pyx":864 + * if bit_count == 16: + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * buf[i] = temp2byte + * if swap == 0: */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } + (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":784 - * buf[i] = temp8byte - * elif n_bytes == 7: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":865 + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - goto __pyx_L18; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":798 - * buf[i] = temp8byte + /* "dataRead.pyx":866 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf * else: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ */ - /*else*/ { - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; - for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { - __pyx_v_i = __pyx_t_9; + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":799 + /* "dataRead.pyx":867 + * buf[i] = temp2byte + * if swap == 0: + * return buf # <<<<<<<<<<<<<< * else: - * for i in range(number_of_records): - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes - */ - (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - - /* "dataRead.pyx":801 - * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< - * # right shift - * if bit_offset > 0: - */ - __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); - - /* "dataRead.pyx":803 - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - __pyx_t_6 = (__pyx_v_bit_offset > 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":804 - * # right shift - * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< - * # mask left part - * if bit_count < 56: - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - - /* "dataRead.pyx":803 - * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes - * # right shift - * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset - * # mask left part - */ - } - - /* "dataRead.pyx":806 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - __pyx_t_6 = (__pyx_v_bit_count < 56); - if (__pyx_t_6) { - - /* "dataRead.pyx":807 - * # mask left part - * if bit_count < 56: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - - /* "dataRead.pyx":806 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 56: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - } - - /* "dataRead.pyx":808 - * if bit_count < 56: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":809 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":810 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 6: + * return buf.byteswap() */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":809 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":866 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * buf[i] = temp2byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - } + } - /* "dataRead.pyx":811 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 6: + /* "dataRead.pyx":869 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * else: * if swap == 0: */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 869, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 869, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; } - __pyx_L18:; - /* "dataRead.pyx":783 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 7: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":862 + * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count + * cdef unsigned char temp[2] + * if bit_count == 16: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) */ - goto __pyx_L3; } - /* "dataRead.pyx":812 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 6: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - __pyx_t_6 = (__pyx_v_n_bytes == 6); - if (__pyx_t_6) { - - /* "dataRead.pyx":813 - * buf[i] = temp8byte - * elif n_bytes == 6: + /* "dataRead.pyx":871 + * return buf.byteswap() + * else: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) */ + /*else*/ { __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":814 - * elif n_bytes == 6: + /* "dataRead.pyx":872 + * else: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift */ __pyx_t_7 = __pyx_v_number_of_records; @@ -31656,135 +32683,116 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":815 + /* "dataRead.pyx":873 * if swap == 0: * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":817 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":875 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp2byte = temp2byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":818 + /* "dataRead.pyx":876 * # right shift * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 48: + * temp2byte &= mask */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":817 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":875 + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp2byte = temp2byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":820 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - __pyx_t_6 = (__pyx_v_bit_count < 48); - if (__pyx_t_6) { - - /* "dataRead.pyx":821 + /* "dataRead.pyx":878 + * temp2byte = temp2byte >> bit_offset * # mask left part - * if bit_count < 48: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask + * temp2byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - /* "dataRead.pyx":820 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":879 * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - } - - /* "dataRead.pyx":822 - * if bit_count < 48: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + * temp2byte |= sign_extend */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":823 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":880 + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + * temp2byte |= sign_extend + * buf[i] = temp2byte */ __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":824 - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":881 + * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte + * temp2byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp2byte * else: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); - /* "dataRead.pyx":823 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":880 + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + * temp2byte |= sign_extend + * buf[i] = temp2byte */ } - /* "dataRead.pyx":825 + /* "dataRead.pyx":882 * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< + * temp2byte |= sign_extend + * buf[i] = temp2byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":813 - * buf[i] = temp8byte - * elif n_bytes == 6: + /* "dataRead.pyx":871 + * return buf.byteswap() + * else: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) */ - goto __pyx_L29; + goto __pyx_L7; } - /* "dataRead.pyx":827 - * buf[i] = temp8byte + /* "dataRead.pyx":884 + * buf[i] = temp2byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * temp2byte = temp[0]<<8 | temp[1] # swap bytes */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -31792,301 +32800,498 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":828 + /* "dataRead.pyx":885 * else: * for i in range(number_of_records): - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< + * temp2byte = temp[0]<<8 | temp[1] # swap bytes + * # right shift */ - (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":830 - * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< + /* "dataRead.pyx":886 + * for i in range(number_of_records): + * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) + * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); + __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); - /* "dataRead.pyx":832 - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + /* "dataRead.pyx":888 + * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp2byte = temp2byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":833 + /* "dataRead.pyx":889 * # right shift * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 48: + * temp2byte &= mask */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":832 - * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + /* "dataRead.pyx":888 + * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp2byte = temp2byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":835 - * temp8byte = temp8byte >> bit_offset - * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - __pyx_t_6 = (__pyx_v_bit_count < 48); - if (__pyx_t_6) { - - /* "dataRead.pyx":836 + /* "dataRead.pyx":891 + * temp2byte = temp2byte >> bit_offset * # mask left part - * if bit_count < 48: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask + * temp2byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - /* "dataRead.pyx":835 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":892 * # mask left part - * if bit_count < 48: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - } - - /* "dataRead.pyx":837 - * if bit_count < 48: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + * temp2byte |= sign_extend */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":838 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":893 + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + * temp2byte |= sign_extend + * buf[i] = temp2byte */ __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":839 - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":894 + * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * elif n_bytes == 5: + * temp2byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp2byte + * return buf */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); - /* "dataRead.pyx":838 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + /* "dataRead.pyx":893 + * temp2byte &= mask + * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + * temp2byte |= sign_extend + * buf[i] = temp2byte */ } - /* "dataRead.pyx":840 + /* "dataRead.pyx":895 * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * elif n_bytes == 5: - * if swap == 0: + * temp2byte |= sign_extend + * buf[i] = temp2byte # <<<<<<<<<<<<<< + * return buf + * */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } } - __pyx_L29:; + __pyx_L7:; - /* "dataRead.pyx":812 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 6: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): + /* "dataRead.pyx":896 + * temp2byte |= sign_extend + * buf[i] = temp2byte + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - goto __pyx_L3; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; } - /* "dataRead.pyx":841 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 5: # <<<<<<<<<<<<<< - * if swap == 0: - * for i in range(number_of_records): - */ - __pyx_t_6 = (__pyx_v_n_bytes == 5); - if (__pyx_t_6) { - - /* "dataRead.pyx":842 - * buf[i] = temp8byte - * elif n_bytes == 5: - * if swap == 0: # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":851 + * return buf + * + * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ - __pyx_t_6 = (__pyx_v_swap == 0); - if (__pyx_t_6) { - /* "dataRead.pyx":843 - * elif n_bytes == 5: - * if swap == 0: - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * # right shift - */ - __pyx_t_7 = __pyx_v_number_of_records; - __pyx_t_8 = __pyx_t_7; + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_signed_short", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":898 + * return buf + * + * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned int __pyx_v_mask; + unsigned int __pyx_v_temp4byte; + unsigned char __pyx_v_temp4[4]; + unsigned char __pyx_v_temp3[3]; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_unsigned_int", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; + + /* "dataRead.pyx":901 + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned int mask = ((1 << bit_count) - 1) + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 901, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 901, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 901, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 901, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 901, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "dataRead.pyx":903 + * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef unsigned int temp4byte = 0 + * cdef unsigned char temp4[4] + */ + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); + + /* "dataRead.pyx":904 + * cdef unsigned long long i + * cdef unsigned int mask = ((1 << bit_count) - 1) + * cdef unsigned int temp4byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] + */ + __pyx_v_temp4byte = 0; + + /* "dataRead.pyx":907 + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] + * if bit_count == 32: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + */ + __pyx_t_6 = (__pyx_v_bit_count == 32); + if (__pyx_t_6) { + + /* "dataRead.pyx":908 + * cdef unsigned char temp3[3] + * if bit_count == 32: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":909 + * if bit_count == 32: + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * if swap == 0: + */ + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); + + /* "dataRead.pyx":910 + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * if swap == 0: + * return buf + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } + + /* "dataRead.pyx":911 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":912 + * buf[i] = temp4byte + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":911 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + } + + /* "dataRead.pyx":914 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * elif n_bytes == 4: + * if swap == 0: + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 914, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":907 + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] + * if bit_count == 32: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + */ + } + + /* "dataRead.pyx":915 + * else: + * return buf.byteswap() + * elif n_bytes == 4: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): + */ + __pyx_t_6 = (__pyx_v_n_bytes == 4); + if (__pyx_t_6) { + + /* "dataRead.pyx":916 + * return buf.byteswap() + * elif n_bytes == 4: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":917 + * elif n_bytes == 4: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":844 + /* "dataRead.pyx":918 * if swap == 0: * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":846 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":920 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp4byte = temp4byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":847 + /* "dataRead.pyx":921 * # right shift * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 40: + * if bit_count < 32: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":846 - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + /* "dataRead.pyx":920 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp4byte = temp4byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":849 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":923 + * temp4byte = temp4byte >> bit_offset * # mask left part - * if bit_count < 40: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ - __pyx_t_6 = (__pyx_v_bit_count < 40); + __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":850 - * # mask left part - * if bit_count < 40: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - - /* "dataRead.pyx":849 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":924 * # mask left part - * if bit_count < 40: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - */ - } - - /* "dataRead.pyx":851 - * if bit_count < 40: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - - /* "dataRead.pyx":852 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte - */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { - - /* "dataRead.pyx":853 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte + * if bit_count < 32: + * temp4byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp4byte * else: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":852 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":923 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ } - /* "dataRead.pyx":854 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< + /* "dataRead.pyx":925 + * if bit_count < 32: + * temp4byte &= mask + * buf[i] = temp4byte # <<<<<<<<<<<<<< * else: * for i in range(number_of_records): */ __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":842 - * buf[i] = temp8byte - * elif n_bytes == 5: + /* "dataRead.pyx":916 + * return buf.byteswap() + * elif n_bytes == 4: * if swap == 0: # <<<<<<<<<<<<<< * for i in range(number_of_records): - * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L40; + goto __pyx_L7; } - /* "dataRead.pyx":856 - * buf[i] = temp8byte + /* "dataRead.pyx":927 + * buf[i] = temp4byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes */ /*else*/ { __pyx_t_7 = __pyx_v_number_of_records; @@ -32094,296 +33299,342 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":857 + /* "dataRead.pyx":928 * else: * for i in range(number_of_records): - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + * # right shift */ - (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":859 - * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) - * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< + /* "dataRead.pyx":929 + * for i in range(number_of_records): + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< * # right shift * if bit_offset > 0: */ - __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); + __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); - /* "dataRead.pyx":861 - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + /* "dataRead.pyx":931 + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp4byte = temp4byte >> bit_offset * # mask left part */ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":862 + /* "dataRead.pyx":932 * # right shift * if bit_offset > 0: - * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< * # mask left part - * if bit_count < 40: + * if bit_count < 32: */ - __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":861 - * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + /* "dataRead.pyx":931 + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< - * temp8byte = temp8byte >> bit_offset + * temp4byte = temp4byte >> bit_offset * # mask left part */ } - /* "dataRead.pyx":864 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":934 + * temp4byte = temp4byte >> bit_offset * # mask left part - * if bit_count < 40: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ - __pyx_t_6 = (__pyx_v_bit_count < 40); + __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":865 + /* "dataRead.pyx":935 * # mask left part - * if bit_count < 40: - * temp8byte &= mask # <<<<<<<<<<<<<< - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend + * if bit_count < 32: + * temp4byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * return buf */ - __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":864 - * temp8byte = temp8byte >> bit_offset + /* "dataRead.pyx":934 + * temp4byte = temp4byte >> bit_offset * # mask left part - * if bit_count < 40: # <<<<<<<<<<<<<< - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ } - /* "dataRead.pyx":866 - * if bit_count < 40: - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend + /* "dataRead.pyx":936 + * if bit_count < 32: + * temp4byte &= mask + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * return buf + * else: # on 3 bytes */ - __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } + } + __pyx_L7:; - /* "dataRead.pyx":867 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":937 + * temp4byte &= mask + * buf[i] = temp4byte + * return buf # <<<<<<<<<<<<<< + * else: # on 3 bytes + * if swap == 0: */ - __pyx_t_6 = (__pyx_v_sign_bit != 0); - if (__pyx_t_6) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":868 - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend # <<<<<<<<<<<<<< - * buf[i] = temp8byte - * return buf + /* "dataRead.pyx":915 + * else: + * return buf.byteswap() + * elif n_bytes == 4: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + } - /* "dataRead.pyx":867 - * temp8byte &= mask - * sign_bit = temp8byte & sign_bit_mask - * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< - * temp8byte |= sign_extend - * buf[i] = temp8byte + /* "dataRead.pyx":939 + * return buf + * else: # on 3 bytes + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - } + /*else*/ { + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":869 - * if sign_bit: # negative value, sign extend - * temp8byte |= sign_extend - * buf[i] = temp8byte # <<<<<<<<<<<<<< - * return buf - * + /* "dataRead.pyx":940 + * else: # on 3 bytes + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift */ - __pyx_t_10 = __pyx_v_i; - *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; - } - } - __pyx_L40:; + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":841 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * elif n_bytes == 5: # <<<<<<<<<<<<<< + /* "dataRead.pyx":941 * if swap == 0: * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - } - __pyx_L3:; + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":870 - * temp8byte |= sign_extend - * buf[i] = temp8byte - * return buf # <<<<<<<<<<<<<< - * - * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, + /* "dataRead.pyx":943 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":731 - * return buf - * - * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, - * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + /* "dataRead.pyx":944 + * # right shift + * if bit_offset > 0: + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 24: */ + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* 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); - { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} - __Pyx_AddTraceback("dataRead.read_signed_longlong", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - goto __pyx_L2; - __pyx_L0:; - __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); - __pyx_L2:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":943 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part + */ + } -/* "dataRead.pyx":872 - * return buf - * - * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset): + /* "dataRead.pyx":946 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ + __pyx_t_6 = (__pyx_v_bit_count < 24); + if (__pyx_t_6) { -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, CYTHON_UNUSED unsigned long __pyx_v_bit_count, CYTHON_UNUSED unsigned char __pyx_v_bit_offset) { - PyArrayObject *__pyx_v_buf = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned long __pyx_v_pos_byte_end; - 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; - unsigned PY_LONG_LONG __pyx_t_5; - unsigned PY_LONG_LONG __pyx_t_6; - unsigned PY_LONG_LONG __pyx_t_7; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_byte", 1); + /* "dataRead.pyx":947 + * # mask left part + * if bit_count < 24: + * temp4byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * else: + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":875 - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset): - * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + /* "dataRead.pyx":946 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 875, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 875, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 875, __pyx_L1_error) - __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + } - /* "dataRead.pyx":877 - * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ + /* "dataRead.pyx":948 + * if bit_count < 24: + * temp4byte &= mask + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ - __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } - /* "dataRead.pyx":878 - * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i]) + /* "dataRead.pyx":939 + * return buf + * else: # on 3 bytes + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_5 = __pyx_v_number_of_records; - __pyx_t_6 = __pyx_t_5; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { - __pyx_v_i = __pyx_t_7; + goto __pyx_L16; + } - /* "dataRead.pyx":879 - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): - * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< - * pos_byte_end + record_byte_size * i]) - * return buf + /* "dataRead.pyx":950 + * buf[i] = temp4byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 879, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 879, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_1, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 879, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":881 - * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i]) - * return buf # <<<<<<<<<<<<<< + /* "dataRead.pyx":951 + * else: + * for i in range(number_of_records): + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + * # right shift + */ + (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + + /* "dataRead.pyx":952 + * for i in range(number_of_records): + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); + + /* "dataRead.pyx":954 + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":955 + * # right shift + * if bit_offset > 0: + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 24: + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":954 + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part + */ + } + + /* "dataRead.pyx":957 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte + */ + __pyx_t_6 = (__pyx_v_bit_count < 24); + if (__pyx_t_6) { + + /* "dataRead.pyx":958 + * # mask left part + * if bit_count < 24: + * temp4byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * return buf + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); + + /* "dataRead.pyx":957 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * buf[i] = temp4byte + */ + } + + /* "dataRead.pyx":959 + * if bit_count < 24: + * temp4byte &= mask + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * return buf * - * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } + } + __pyx_L16:; - /* "dataRead.pyx":872 - * return buf + /* "dataRead.pyx":960 + * temp4byte &= mask + * buf[i] = temp4byte + * return buf # <<<<<<<<<<<<<< * - * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset): + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + } + + /* "dataRead.pyx":898 + * return buf + * + * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ /* function exit code */ @@ -32392,5577 +33643,3574 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_b __Pyx_XDECREF(__pyx_t_2); __Pyx_XDECREF(__pyx_t_3); __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("dataRead.read_byte", __pyx_clineno, __pyx_lineno, __pyx_filename); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_unsigned_int", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; + goto __pyx_L2; __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":883 - * return buf +/* "dataRead.pyx":963 * - * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * + * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, CYTHON_UNUSED unsigned long __pyx_v_bit_count, CYTHON_UNUSED unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { PyArrayObject *__pyx_v_buf = 0; unsigned PY_LONG_LONG __pyx_v_i; - unsigned long __pyx_v_pos_byte_end; + unsigned int __pyx_v_mask; + int __pyx_v_temp4byte; + unsigned int __pyx_v_sign_bit; + unsigned int __pyx_v_sign_bit_mask; + unsigned int __pyx_v_sign_extend; + unsigned char __pyx_v_temp4[4]; + unsigned char __pyx_v_temp3[3]; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; - unsigned PY_LONG_LONG __pyx_t_5; - unsigned PY_LONG_LONG __pyx_t_6; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; unsigned PY_LONG_LONG __pyx_t_7; - int __pyx_t_8; - unsigned int __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned int __pyx_t_11; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("read_array", 1); + __Pyx_RefNannySetupContext("read_signed_int", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":886 - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): - * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + /* "dataRead.pyx":966 + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * cdef unsigned int mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 886, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 886, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 886, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 886, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 886, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 966, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 966, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 886, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 966, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 966, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":888 - * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array + /* "dataRead.pyx":968 + * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef int temp4byte = 0 + * cdef unsigned int sign_bit = 0 */ - __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":889 + /* "dataRead.pyx":969 * cdef unsigned long long i - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): # <<<<<<<<<<<<<< - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) + * cdef unsigned int mask = ((1 << bit_count) - 1) + * cdef int temp4byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned int sign_bit = 0 + * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) */ - __pyx_t_5 = __pyx_v_number_of_records; - __pyx_t_6 = __pyx_t_5; - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { - __pyx_v_i = __pyx_t_7; + __pyx_v_temp4byte = 0; - /* "dataRead.pyx":890 - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: + /* "dataRead.pyx":970 + * cdef unsigned int mask = ((1 << bit_count) - 1) + * cdef int temp4byte = 0 + * cdef unsigned int sign_bit = 0 # <<<<<<<<<<<<<< + * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 890, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 890, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_sign_bit = 0; - /* "dataRead.pyx":891 - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":971 + * cdef int temp4byte = 0 + * cdef unsigned int sign_bit = 0 + * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< + * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count + * cdef unsigned char temp4[4] */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 890, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); + __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":890 - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: + /* "dataRead.pyx":972 + * cdef unsigned int sign_bit = 0 + * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 890, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(0, 890, __pyx_L1_error); - __pyx_t_4 = 0; + __pyx_v_sign_extend = (((1 << (32 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":891 - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< - * if swap == 0: - * return buf + /* "dataRead.pyx":975 + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] + * if bit_count == 32: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) */ - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 891, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 891, __pyx_L1_error) + __pyx_t_6 = (__pyx_v_bit_count == 32); + if (__pyx_t_6) { - /* "dataRead.pyx":890 - * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes - * for i in range(number_of_records): - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: + /* "dataRead.pyx":976 + * cdef unsigned char temp3[3] + * if bit_count == 32: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 890, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_2, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 890, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":892 - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":977 + * if bit_count == 32: + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * if swap == 0: */ - __pyx_t_8 = (__pyx_v_swap == 0); - if (__pyx_t_8) { + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); - /* "dataRead.pyx":893 - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: - * return buf # <<<<<<<<<<<<<< - * else: - * return buf.byteswap() + /* "dataRead.pyx":978 + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_buf); - __pyx_r = ((PyObject *)__pyx_v_buf); - goto __pyx_L0; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } - /* "dataRead.pyx":892 - * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ - * pos_byte_end + record_byte_size * i], dtype=record_format) - * if swap == 0: # <<<<<<<<<<<<<< - * return buf - * else: + /* "dataRead.pyx":979 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - } + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":895 - * return buf - * else: - * return buf.byteswap() # <<<<<<<<<<<<<< - * - * def unsorted_data_read4(record, info, bytes tmp, + /* "dataRead.pyx":980 + * buf[i] = temp4byte + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 895, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_9 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 895, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - } + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":883 - * return buf - * - * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< - * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, - * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + /* "dataRead.pyx":979 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + * buf[i] = temp4byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ + } - /* 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_AddTraceback("dataRead.read_array", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":897 - * return buf.byteswap() - * - * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< - * const unsigned short record_id_size, - * const unsigned long long data_block_length): + /* "dataRead.pyx":982 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * elif n_bytes == 4: + * if swap == 0: */ - -/* Python wrapper */ -static PyObject *__pyx_pw_8dataRead_3unsorted_data_read4(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -PyDoc_STRVAR(__pyx_doc_8dataRead_2unsorted_data_read4, " reads only the channels using offset functions, channel by channel within unsorted data\n\n Parameters\n ------------\n record : class\n record class\n info: class\n info class\n tmp : bytes\n byte stream\n record_id_size : unsigned short\n record id length\n data_block_length : unsigned long long\n length of data block minus header\n\n Returns\n --------\n buf : array\n data array\n\n "); -static PyMethodDef __pyx_mdef_8dataRead_3unsorted_data_read4 = {"unsorted_data_read4", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_3unsorted_data_read4, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_2unsorted_data_read4}; -static PyObject *__pyx_pw_8dataRead_3unsorted_data_read4(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - PyObject *__pyx_v_record = 0; - PyObject *__pyx_v_info = 0; - PyObject *__pyx_v_tmp = 0; - unsigned short __pyx_v_record_id_size; - unsigned PY_LONG_LONG __pyx_v_data_block_length; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[5] = {0,0,0,0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("unsorted_data_read4 (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_record,&__pyx_n_s_info,&__pyx_n_s_tmp,&__pyx_n_s_record_id_size,&__pyx_n_s_data_block_length,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_info)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 1); __PYX_ERR(0, 897, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tmp)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 2); __PYX_ERR(0, 897, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_id_size)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 3); __PYX_ERR(0, 897, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data_block_length)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 897, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 4); __PYX_ERR(0, 897, __pyx_L3_error) + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 982, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; } } - if (unlikely(kw_args > 0)) { - const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "unsorted_data_read4") < 0)) __PYX_ERR(0, 897, __pyx_L3_error) + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 982, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - } else if (unlikely(__pyx_nargs != 5)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - } - __pyx_v_record = values[0]; - __pyx_v_info = values[1]; - __pyx_v_tmp = ((PyObject*)values[2]); - __pyx_v_record_id_size = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_record_id_size == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 898, __pyx_L3_error) - __pyx_v_data_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_data_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 899, __pyx_L3_error) - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 897, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; } - } - __Pyx_AddTraceback("dataRead.unsorted_data_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 897, __pyx_L1_error) - __pyx_r = __pyx_pf_8dataRead_2unsorted_data_read4(__pyx_self, __pyx_v_record, __pyx_v_info, __pyx_v_tmp, __pyx_v_record_id_size, __pyx_v_data_block_length); - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } + /* "dataRead.pyx":975 + * cdef unsigned char temp4[4] + * cdef unsigned char temp3[3] + * if bit_count == 32: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) + */ } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_8dataRead_2unsorted_data_read4(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_record, PyObject *__pyx_v_info, PyObject *__pyx_v_tmp, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_data_block_length) { - char const *__pyx_v_bit_stream; - unsigned PY_LONG_LONG __pyx_v_position; - unsigned char __pyx_v_record_id_char; - unsigned short __pyx_v_record_id_short; - unsigned long __pyx_v_record_id_long; - unsigned PY_LONG_LONG __pyx_v_record_id_long_long; - PyObject *__pyx_v_buf = 0; - PyObject *__pyx_v_VLSD = 0; - PyObject *__pyx_v_pos_byte_beg = 0; - PyObject *__pyx_v_pos_byte_end = 0; - PyObject *__pyx_v_c_format_structure = 0; - CYTHON_UNUSED PyObject *__pyx_v_byte_length = 0; - PyObject *__pyx_v_numpy_format = 0; - PyObject *__pyx_v_index = 0; - PyObject *__pyx_v_CGrecordLength = 0; - PyObject *__pyx_v_VLSD_flag = 0; - PyObject *__pyx_v_VLSD_CG_name = 0; - PyObject *__pyx_v_VLSD_CG_signal_data_type = 0; - PyObject *__pyx_v_channel_name_set = 0; - PyObject *__pyx_v_record_id = NULL; - PyObject *__pyx_v_Channel = NULL; - PyObject *__pyx_v_name = NULL; - PyObject *__pyx_v_channel_name = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - char *__pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - PyObject *(*__pyx_t_4)(PyObject *); - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - unsigned int __pyx_t_9; - Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - int __pyx_t_12; - int __pyx_t_13; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - PyObject *(*__pyx_t_19)(PyObject *); - unsigned PY_LONG_LONG __pyx_t_20; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("unsorted_data_read4", 1); - /* "dataRead.pyx":921 - * - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< - * cdef unsigned long long position = 0 - * cdef unsigned char record_id_char = 0 + /* "dataRead.pyx":983 + * else: + * return buf.byteswap() + * elif n_bytes == 4: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 921, __pyx_L1_error) - __pyx_v_bit_stream = __pyx_t_1; + __pyx_t_6 = (__pyx_v_n_bytes == 4); + if (__pyx_t_6) { - /* "dataRead.pyx":922 - * """ - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * cdef unsigned long long position = 0 # <<<<<<<<<<<<<< - * cdef unsigned char record_id_char = 0 - * cdef unsigned short record_id_short = 0 + /* "dataRead.pyx":984 + * return buf.byteswap() + * elif n_bytes == 4: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_v_position = 0; + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":923 - * cdef const char* bit_stream = PyBytes_AsString(tmp) - * cdef unsigned long long position = 0 - * cdef unsigned char record_id_char = 0 # <<<<<<<<<<<<<< - * cdef unsigned short record_id_short = 0 - * cdef unsigned long record_id_long = 0 + /* "dataRead.pyx":985 + * elif n_bytes == 4: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift */ - __pyx_v_record_id_char = 0; + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":924 - * cdef unsigned long long position = 0 - * cdef unsigned char record_id_char = 0 - * cdef unsigned short record_id_short = 0 # <<<<<<<<<<<<<< - * cdef unsigned long record_id_long = 0 - * cdef unsigned long long record_id_long_long = 0 + /* "dataRead.pyx":986 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_v_record_id_short = 0; + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":925 - * cdef unsigned char record_id_char = 0 - * cdef unsigned short record_id_short = 0 - * cdef unsigned long record_id_long = 0 # <<<<<<<<<<<<<< - * cdef unsigned long long record_id_long_long = 0 - * # initialise data structure + /* "dataRead.pyx":988 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - __pyx_v_record_id_long = 0; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":926 - * cdef unsigned short record_id_short = 0 - * cdef unsigned long record_id_long = 0 - * cdef unsigned long long record_id_long_long = 0 # <<<<<<<<<<<<<< - * # initialise data structure - * # key is channel name + /* "dataRead.pyx":989 + * # right shift + * if bit_offset > 0: + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 32: */ - __pyx_v_record_id_long_long = 0; + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":929 - * # initialise data structure - * # key is channel name - * cdef dict buf = {} # <<<<<<<<<<<<<< - * cdef dict VLSD = {} - * cdef dict pos_byte_beg = {} + /* "dataRead.pyx":988 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 929, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_buf = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + } - /* "dataRead.pyx":930 - * # key is channel name - * cdef dict buf = {} - * cdef dict VLSD = {} # <<<<<<<<<<<<<< - * cdef dict pos_byte_beg = {} - * cdef dict pos_byte_end = {} + /* "dataRead.pyx":991 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 930, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_VLSD = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_6 = (__pyx_v_bit_count < 32); + if (__pyx_t_6) { - /* "dataRead.pyx":931 - * cdef dict buf = {} - * cdef dict VLSD = {} - * cdef dict pos_byte_beg = {} # <<<<<<<<<<<<<< - * cdef dict pos_byte_end = {} - * cdef dict c_format_structure = {} + /* "dataRead.pyx":992 + * # mask left part + * if bit_count < 32: + * temp4byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 931, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_pos_byte_beg = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":932 - * cdef dict VLSD = {} - * cdef dict pos_byte_beg = {} - * cdef dict pos_byte_end = {} # <<<<<<<<<<<<<< - * cdef dict c_format_structure = {} - * cdef dict byte_length = {} + /* "dataRead.pyx":991 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 932, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_pos_byte_end = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + } - /* "dataRead.pyx":933 - * cdef dict pos_byte_beg = {} - * cdef dict pos_byte_end = {} - * cdef dict c_format_structure = {} # <<<<<<<<<<<<<< - * cdef dict byte_length = {} - * cdef dict numpy_format = {} + /* "dataRead.pyx":993 + * if bit_count < 32: + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 933, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_c_format_structure = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":934 - * cdef dict pos_byte_end = {} - * cdef dict c_format_structure = {} - * cdef dict byte_length = {} # <<<<<<<<<<<<<< - * cdef dict numpy_format = {} - * # key is record id + /* "dataRead.pyx":994 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 934, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_byte_length = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":935 - * cdef dict c_format_structure = {} - * cdef dict byte_length = {} - * cdef dict numpy_format = {} # <<<<<<<<<<<<<< - * # key is record id - * cdef dict index = {} + /* "dataRead.pyx":995 + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * else: */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 935, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_numpy_format = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - /* "dataRead.pyx":937 - * cdef dict numpy_format = {} - * # key is record id - * cdef dict index = {} # <<<<<<<<<<<<<< - * cdef dict CGrecordLength = {} - * cdef dict VLSD_flag = {} + /* "dataRead.pyx":994 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 937, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_index = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + } - /* "dataRead.pyx":938 - * # key is record id - * cdef dict index = {} - * cdef dict CGrecordLength = {} # <<<<<<<<<<<<<< - * cdef dict VLSD_flag = {} - * cdef dict VLSD_CG_name = {} + /* "dataRead.pyx":996 + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 938, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_CGrecordLength = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } - /* "dataRead.pyx":939 - * cdef dict index = {} - * cdef dict CGrecordLength = {} - * cdef dict VLSD_flag = {} # <<<<<<<<<<<<<< - * cdef dict VLSD_CG_name = {} - * cdef dict VLSD_CG_signal_data_type = {} + /* "dataRead.pyx":984 + * return buf.byteswap() + * elif n_bytes == 4: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 939, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_VLSD_flag = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + goto __pyx_L7; + } - /* "dataRead.pyx":940 - * cdef dict CGrecordLength = {} - * cdef dict VLSD_flag = {} - * cdef dict VLSD_CG_name = {} # <<<<<<<<<<<<<< - * cdef dict VLSD_CG_signal_data_type = {} - * cdef dict channel_name_set = {} + /* "dataRead.pyx":998 + * buf[i] = temp4byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 940, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_VLSD_CG_name = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":941 - * cdef dict VLSD_flag = {} - * cdef dict VLSD_CG_name = {} - * cdef dict VLSD_CG_signal_data_type = {} # <<<<<<<<<<<<<< - * cdef dict channel_name_set = {} - * for record_id in record: + /* "dataRead.pyx":999 + * else: + * for i in range(number_of_records): + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + * # right shift */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 941, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_VLSD_CG_signal_data_type = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":942 - * cdef dict VLSD_CG_name = {} - * cdef dict VLSD_CG_signal_data_type = {} - * cdef dict channel_name_set = {} # <<<<<<<<<<<<<< - * for record_id in record: - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + /* "dataRead.pyx":1000 + * for i in range(number_of_records): + * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 942, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_channel_name_set = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; + __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); - /* "dataRead.pyx":943 - * cdef dict VLSD_CG_signal_data_type = {} - * cdef dict channel_name_set = {} - * for record_id in record: # <<<<<<<<<<<<<< - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - * VLSD_flag[record_id] = True + /* "dataRead.pyx":1002 + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - if (likely(PyList_CheckExact(__pyx_v_record)) || PyTuple_CheckExact(__pyx_v_record)) { - __pyx_t_2 = __pyx_v_record; __Pyx_INCREF(__pyx_t_2); - __pyx_t_3 = 0; - __pyx_t_4 = NULL; - } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_record); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 943, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 943, __pyx_L1_error) - } - for (;;) { - if (likely(!__pyx_t_4)) { - if (likely(PyList_CheckExact(__pyx_t_2))) { - { - Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); - #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 943, __pyx_L1_error) - #endif - if (__pyx_t_3 >= __pyx_temp) break; - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 943, __pyx_L1_error) - #else - __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 943, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - } else { - { - Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2); - #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 943, __pyx_L1_error) - #endif - if (__pyx_t_3 >= __pyx_temp) break; - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 943, __pyx_L1_error) - #else - __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 943, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - } - } else { - __pyx_t_5 = __pyx_t_4(__pyx_t_2); - if (unlikely(!__pyx_t_5)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 943, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_5); - } - __Pyx_XDECREF_SET(__pyx_v_record_id, __pyx_t_5); - __pyx_t_5 = 0; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":944 - * cdef dict channel_name_set = {} - * for record_id in record: - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< - * VLSD_flag[record_id] = True - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + /* "dataRead.pyx":1003 + * # right shift + * if bit_offset > 0: + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 32: */ - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 944, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 944, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_Flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 944, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyInt_AndObjC(__pyx_t_5, __pyx_int_33, 33, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 944, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 944, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (__pyx_t_7) { + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":945 - * for record_id in record: - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - * VLSD_flag[record_id] = True # <<<<<<<<<<<<<< - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] - * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] + /* "dataRead.pyx":1002 + * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_True) < 0))) __PYX_ERR(0, 945, __pyx_L1_error) + } - /* "dataRead.pyx":946 - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - * VLSD_flag[record_id] = True - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] # <<<<<<<<<<<<<< - * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] - * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) + /* "dataRead.pyx":1005 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ - __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 946, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 946, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 946, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channelName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 946, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_t_5, __pyx_t_6) < 0))) __PYX_ERR(0, 946, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = (__pyx_v_bit_count < 32); + if (__pyx_t_6) { - /* "dataRead.pyx":947 - * VLSD_flag[record_id] = True - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] - * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] # <<<<<<<<<<<<<< - * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) - * else: + /* "dataRead.pyx":1006 + * # mask left part + * if bit_count < 32: + * temp4byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 947, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 947, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 947, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 947, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_channelName); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 947, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 947, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":948 - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] - * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] - * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) # <<<<<<<<<<<<<< - * else: - * VLSD_flag[record_id] = False + /* "dataRead.pyx":1005 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 948, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 948, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 948, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 948, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channel); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 948, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_signal_data_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 948, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - __pyx_t_9 = 1; } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_info}; - __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 948, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 948, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":944 - * cdef dict channel_name_set = {} - * for record_id in record: - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< - * VLSD_flag[record_id] = True - * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + /* "dataRead.pyx":1007 + * if bit_count < 32: + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend */ - goto __pyx_L5; - } + __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":950 - * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) - * else: - * VLSD_flag[record_id] = False # <<<<<<<<<<<<<< - * for Channel in record[record_id]['record'].values(): - * #if not Channel.VLSD_CG_Flag: + /* "dataRead.pyx":1008 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte */ - /*else*/ { - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_False) < 0))) __PYX_ERR(0, 950, __pyx_L1_error) + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":951 - * else: - * VLSD_flag[record_id] = False - * for Channel in record[record_id]['record'].values(): # <<<<<<<<<<<<<< - * #if not Channel.VLSD_CG_Flag: - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), + /* "dataRead.pyx":1009 + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * return buf */ - __pyx_t_10 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 951, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 951, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(__pyx_t_5 == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 951, __pyx_L1_error) - } - __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 951, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); - __pyx_t_6 = __pyx_t_8; - __pyx_t_8 = 0; - while (1) { - __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_10, NULL, &__pyx_t_8, NULL, __pyx_t_12); - if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 951, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_Channel, __pyx_t_8); - __pyx_t_8 = 0; + __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - /* "dataRead.pyx":953 - * for Channel in record[record_id]['record'].values(): - * #if not Channel.VLSD_CG_Flag: - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') - * numpy_format[Channel.name] = Channel.data_format(info) + /* "dataRead.pyx":1008 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_numberOfRecords); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_GIVEREF(__pyx_t_8); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error); - __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_14); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14)) __PYX_ERR(0, 953, __pyx_L1_error); - __pyx_t_14 = 0; + } - /* "dataRead.pyx":954 - * #if not Channel.VLSD_CG_Flag: - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') # <<<<<<<<<<<<<< - * numpy_format[Channel.name] = Channel.data_format(info) - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + /* "dataRead.pyx":1010 + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * return buf + * else: # on 3 bytes */ - __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 954, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 954, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 954, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_18 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_16))) { - __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_16); - if (likely(__pyx_t_18)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); - __Pyx_INCREF(__pyx_t_18); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_16, function); - __pyx_t_9 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_17}; - __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; - __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 954, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - } - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 954, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 954, __pyx_L1_error) + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } + } + __pyx_L7:; - /* "dataRead.pyx":953 - * for Channel in record[record_id]['record'].values(): - * #if not Channel.VLSD_CG_Flag: - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') - * numpy_format[Channel.name] = Channel.data_format(info) + /* "dataRead.pyx":1011 + * temp4byte |= sign_extend + * buf[i] = temp4byte + * return buf # <<<<<<<<<<<<<< + * else: # on 3 bytes + * if swap == 0: */ - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 953, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":955 - * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') - * numpy_format[Channel.name] = Channel.data_format(info) # <<<<<<<<<<<<<< - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + /* "dataRead.pyx":983 + * else: + * return buf.byteswap() + * elif n_bytes == 4: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_data_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 955, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = NULL; - __pyx_t_9 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_14))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_14, function); - __pyx_t_9 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_info}; - __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 955, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 955, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_numpy_format, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 955, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } - /* "dataRead.pyx":956 - * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') - * numpy_format[Channel.name] = Channel.data_format(info) - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset # <<<<<<<<<<<<<< - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned - * index[record_id] = 0 + /* "dataRead.pyx":1013 + * return buf + * else: # on 3 bytes + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF */ - __pyx_t_15 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 956, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_byteOffset); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 956, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 956, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 956, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_beg, __pyx_t_14, __pyx_t_8) < 0))) __PYX_ERR(0, 956, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + /*else*/ { + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":957 - * numpy_format[Channel.name] = Channel.data_format(info) - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned # <<<<<<<<<<<<<< - * index[record_id] = 0 - * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength + /* "dataRead.pyx":1014 + * else: # on 3 bytes + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 957, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_pos_byte_beg, __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 957, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 957, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_15 = PyNumber_Add(__pyx_t_14, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 957, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 957, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_end, __pyx_t_8, __pyx_t_15) < 0))) __PYX_ERR(0, 957, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":958 - * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned - * index[record_id] = 0 # <<<<<<<<<<<<<< - * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength - * channel_name_set[record_id] = record[record_id]['record'].channelNames + /* "dataRead.pyx":1015 + * if swap == 0: + * for i in range(number_of_records): + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF # <<<<<<<<<<<<<< + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift */ - if (unlikely((PyDict_SetItem(__pyx_v_index, __pyx_v_record_id, __pyx_int_0) < 0))) __PYX_ERR(0, 958, __pyx_L1_error) + __pyx_v_temp4byte = 0; - /* "dataRead.pyx":959 - * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned - * index[record_id] = 0 - * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength # <<<<<<<<<<<<<< - * channel_name_set[record_id] = record[record_id]['record'].channelNames - * # read data + /* "dataRead.pyx":1016 + * for i in range(number_of_records): + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 959, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 959, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_CGrecordLength); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 959, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_CGrecordLength, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 959, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":960 - * index[record_id] = 0 - * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength - * channel_name_set[record_id] = record[record_id]['record'].channelNames # <<<<<<<<<<<<<< - * # read data - * if record_id_size == 1: + /* "dataRead.pyx":1018 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 960, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 960, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_channelNames); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 960, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_channel_name_set, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 960, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __pyx_L5:; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":943 - * cdef dict VLSD_CG_signal_data_type = {} - * cdef dict channel_name_set = {} - * for record_id in record: # <<<<<<<<<<<<<< - * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) - * VLSD_flag[record_id] = True + /* "dataRead.pyx":1019 + * # right shift + * if bit_offset > 0: + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 24: */ - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":962 - * channel_name_set[record_id] = record[record_id]['record'].channelNames - * # read data - * if record_id_size == 1: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) + /* "dataRead.pyx":1018 + * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - switch (__pyx_v_record_id_size) { - case 1: + } - /* "dataRead.pyx":963 - * # read data - * if record_id_size == 1: - * while position < data_block_length: # <<<<<<<<<<<<<< - * memcpy(&record_id_char, &bit_stream[position], 1) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, + /* "dataRead.pyx":1021 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ - while (1) { - __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); - if (!__pyx_t_7) break; + __pyx_t_6 = (__pyx_v_bit_count < 24); + if (__pyx_t_6) { - /* "dataRead.pyx":964 - * if record_id_size == 1: - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) # <<<<<<<<<<<<<< - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, - * position, buf, VLSD, pos_byte_beg, pos_byte_end, + /* "dataRead.pyx":1022 + * # mask left part + * if bit_count < 24: + * temp4byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend */ - (void)(memcpy((&__pyx_v_record_id_char), (&(__pyx_v_bit_stream[__pyx_v_position])), 1)); + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":965 - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1021 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ - __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_record_id_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 965, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); + } - /* "dataRead.pyx":968 - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< - * elif record_id_size == 2: - * while position < data_block_length: + /* "dataRead.pyx":1023 + * if bit_count < 24: + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":1024 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":1025 + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * else: + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":1024 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte */ - __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 1, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 965, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { - PyObject* sequence = __pyx_t_6; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 965, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_15 = PyList_GET_ITEM(sequence, 1); - __pyx_t_8 = PyList_GET_ITEM(sequence, 2); - __pyx_t_14 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_14); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 965, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 965, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L11_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 965, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L12_unpacking_done; - __pyx_L11_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 965, __pyx_L1_error) - __pyx_L12_unpacking_done:; + + /* "dataRead.pyx":1026 + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":965 - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1013 + * return buf + * else: # on 3 bytes + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 965, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 965, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 965, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 965, __pyx_L1_error) - __pyx_v_position = __pyx_t_20; - __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); - __pyx_t_15 = 0; - __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_14)); - __pyx_t_14 = 0; + goto __pyx_L18; } - /* "dataRead.pyx":962 - * channel_name_set[record_id] = record[record_id]['record'].channelNames - * # read data - * if record_id_size == 1: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_char, &bit_stream[position], 1) + /* "dataRead.pyx":1028 + * buf[i] = temp4byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes */ - break; - case 2: + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":970 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 2: - * while position < data_block_length: # <<<<<<<<<<<<<< - * memcpy(&record_id_short, &bit_stream[position], 2) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, + /* "dataRead.pyx":1029 + * else: + * for i in range(number_of_records): + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + * # right shift */ - while (1) { - __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); - if (!__pyx_t_7) break; + (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":971 - * elif record_id_size == 2: - * while position < data_block_length: - * memcpy(&record_id_short, &bit_stream[position], 2) # <<<<<<<<<<<<<< - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, - * position, buf, VLSD, pos_byte_beg, pos_byte_end, + /* "dataRead.pyx":1030 + * for i in range(number_of_records): + * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - (void)(memcpy((&__pyx_v_record_id_short), (&(__pyx_v_bit_stream[__pyx_v_position])), 2)); + __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); - /* "dataRead.pyx":972 - * while position < data_block_length: - * memcpy(&record_id_short, &bit_stream[position], 2) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1032 + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - __pyx_t_6 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_short); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 972, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":975 - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< - * elif record_id_size == 3: - * while position < data_block_length: + /* "dataRead.pyx":1033 + * # right shift + * if bit_offset > 0: + * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 24: + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":1032 + * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp4byte = temp4byte >> bit_offset + * # mask left part */ - __pyx_t_14 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_6, 2, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 972, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) { - PyObject* sequence = __pyx_t_14; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 972, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_6 = PyList_GET_ITEM(sequence, 0); - __pyx_t_8 = PyList_GET_ITEM(sequence, 1); - __pyx_t_15 = PyList_GET_ITEM(sequence, 2); - __pyx_t_2 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(__pyx_t_2); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 972, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 972, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L15_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 972, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L16_unpacking_done; - __pyx_L15_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 972, __pyx_L1_error) - __pyx_L16_unpacking_done:; - } - /* "dataRead.pyx":972 - * while position < data_block_length: - * memcpy(&record_id_short, &bit_stream[position], 2) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1035 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_6); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 972, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 972, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 972, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 972, __pyx_L1_error) - __pyx_v_position = __pyx_t_20; - __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_15)); - __pyx_t_15 = 0; - __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_2)); - __pyx_t_2 = 0; - } + __pyx_t_6 = (__pyx_v_bit_count < 24); + if (__pyx_t_6) { - /* "dataRead.pyx":969 - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 2: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_short, &bit_stream[position], 2) + /* "dataRead.pyx":1036 + * # mask left part + * if bit_count < 24: + * temp4byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend */ - break; - case 3: + __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":977 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 3: - * while position < data_block_length: # <<<<<<<<<<<<<< - * memcpy(&record_id_long, &bit_stream[position], 4) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, + /* "dataRead.pyx":1035 + * temp4byte = temp4byte >> bit_offset + * # mask left part + * if bit_count < 24: # <<<<<<<<<<<<<< + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed */ - while (1) { - __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); - if (!__pyx_t_7) break; + } - /* "dataRead.pyx":978 - * elif record_id_size == 3: - * while position < data_block_length: - * memcpy(&record_id_long, &bit_stream[position], 4) # <<<<<<<<<<<<<< - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, - * position, buf, VLSD, pos_byte_beg, pos_byte_end, + /* "dataRead.pyx":1037 + * if bit_count < 24: + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend */ - (void)(memcpy((&__pyx_v_record_id_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); + __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":979 - * while position < data_block_length: - * memcpy(&record_id_long, &bit_stream[position], 4) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1038 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte */ - __pyx_t_14 = __Pyx_PyInt_From_unsigned_long(__pyx_v_record_id_long); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 979, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":982 - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< - * elif record_id_size == 4: - * while position < data_block_length: + /* "dataRead.pyx":1039 + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp4byte + * return buf + */ + __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":1038 + * temp4byte &= mask + * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp4byte |= sign_extend + * buf[i] = temp4byte */ - __pyx_t_2 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_14, 4, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 979, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { - PyObject* sequence = __pyx_t_2; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 979, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_14 = PyList_GET_ITEM(sequence, 0); - __pyx_t_15 = PyList_GET_ITEM(sequence, 1); - __pyx_t_8 = PyList_GET_ITEM(sequence, 2); - __pyx_t_6 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_6); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 979, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 979, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L19_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 979, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L20_unpacking_done; - __pyx_L19_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 979, __pyx_L1_error) - __pyx_L20_unpacking_done:; - } - /* "dataRead.pyx":979 - * while position < data_block_length: - * memcpy(&record_id_long, &bit_stream[position], 4) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1040 + * if sign_bit: # negative value, sign extend + * temp4byte |= sign_extend + * buf[i] = temp4byte # <<<<<<<<<<<<<< + * return buf + * */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_14); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 979, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 979, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 979, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_6))) __PYX_ERR(0, 979, __pyx_L1_error) - __pyx_v_position = __pyx_t_20; - __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); - __pyx_t_15 = 0; - __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_6)); - __pyx_t_6 = 0; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; + } } + __pyx_L18:; - /* "dataRead.pyx":976 - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 3: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_long, &bit_stream[position], 4) + /* "dataRead.pyx":1041 + * temp4byte |= sign_extend + * buf[i] = temp4byte + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - break; - case 4: + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + } - /* "dataRead.pyx":984 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 4: - * while position < data_block_length: # <<<<<<<<<<<<<< - * memcpy(&record_id_long_long, &bit_stream[position], 8) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, + /* "dataRead.pyx":963 + * + * + * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ - while (1) { - __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); - if (!__pyx_t_7) break; - /* "dataRead.pyx":985 - * elif record_id_size == 4: - * while position < data_block_length: - * memcpy(&record_id_long_long, &bit_stream[position], 8) # <<<<<<<<<<<<<< - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - */ - (void)(memcpy((&__pyx_v_record_id_long_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 8)); + /* 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); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_signed_int", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; + __pyx_L0:; + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} - /* "dataRead.pyx":986 - * while position < data_block_length: - * memcpy(&record_id_long_long, &bit_stream[position], 8) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, +/* "dataRead.pyx":1043 + * return buf + * + * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ - __pyx_t_2 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_record_id_long_long); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 986, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - /* "dataRead.pyx":989 - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< - * # changing from bytes type to desired type - * if buf: - */ - __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 8, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 986, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { - PyObject* sequence = __pyx_t_6; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 4)) { - if (size > 4) __Pyx_RaiseTooManyValuesError(4); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 986, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); - __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); - } else { - __pyx_t_2 = PyList_GET_ITEM(sequence, 0); - __pyx_t_8 = PyList_GET_ITEM(sequence, 1); - __pyx_t_15 = PyList_GET_ITEM(sequence, 2); - __pyx_t_14 = PyList_GET_ITEM(sequence, 3); - } - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(__pyx_t_14); - #else - { - Py_ssize_t i; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; - for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 986, __pyx_L1_error) - __Pyx_GOTREF(item); - *(temps[i]) = item; - } - } - #endif - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else { - Py_ssize_t index = -1; - PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 986, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); - for (index=0; index < 4; index++) { - PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L23_unpacking_failed; - __Pyx_GOTREF(item); - *(temps[index]) = item; - } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 986, __pyx_L1_error) - __pyx_t_19 = NULL; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - goto __pyx_L24_unpacking_done; - __pyx_L23_unpacking_failed:; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_19 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 986, __pyx_L1_error) - __pyx_L24_unpacking_done:; - } +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned PY_LONG_LONG __pyx_v_mask; + unsigned PY_LONG_LONG __pyx_v_temp8byte; + unsigned char __pyx_v_temp8[8]; + unsigned char __pyx_v_temp7[7]; + unsigned char __pyx_v_temp6[6]; + unsigned char __pyx_v_temp5[5]; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned int __pyx_t_11; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("read_unsigned_longlong", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":986 - * while position < data_block_length: - * memcpy(&record_id_long_long, &bit_stream[position], 8) - * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< - * position, buf, VLSD, pos_byte_beg, pos_byte_end, - * c_format_structure, index, CGrecordLength, + /* "dataRead.pyx":1046 + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long long mask = ((1 << bit_count) - 1) */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 986, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 986, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 986, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 986, __pyx_L1_error) - __pyx_v_position = __pyx_t_20; - __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); - __pyx_t_8 = 0; - __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_15)); - __pyx_t_15 = 0; - __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_14)); - __pyx_t_14 = 0; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1046, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1046, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 1046, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "dataRead.pyx":983 - * c_format_structure, index, CGrecordLength, - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * elif record_id_size == 4: # <<<<<<<<<<<<<< - * while position < data_block_length: - * memcpy(&record_id_long_long, &bit_stream[position], 8) + /* "dataRead.pyx":1048 + * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef unsigned long long temp8byte = 0 + * cdef unsigned char temp8[8] */ - break; - default: break; - } + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":991 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * # changing from bytes type to desired type - * if buf: # <<<<<<<<<<<<<< - * for name in buf.keys(): - * buf[name] = buf[name].view(dtype=numpy_format[name]) + /* "dataRead.pyx":1049 + * cdef unsigned long long i + * cdef unsigned long long mask = ((1 << bit_count) - 1) + * cdef unsigned long long temp8byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned char temp8[8] + * cdef unsigned char temp7[7] */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_buf); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 991, __pyx_L1_error) - if (__pyx_t_7) { + __pyx_v_temp8byte = 0; - /* "dataRead.pyx":992 - * # changing from bytes type to desired type - * if buf: - * for name in buf.keys(): # <<<<<<<<<<<<<< - * buf[name] = buf[name].view(dtype=numpy_format[name]) - * # convert list to array for VLSD only + /* "dataRead.pyx":1054 + * cdef unsigned char temp6[6] + * cdef unsigned char temp5[5] + * if bit_count == 64: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_3 = 0; - if (unlikely(__pyx_v_buf == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys"); - __PYX_ERR(0, 992, __pyx_L1_error) - } - __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_buf, 1, __pyx_n_s_keys, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 992, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_6); - __pyx_t_6 = __pyx_t_14; - __pyx_t_14 = 0; - while (1) { - __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_3, &__pyx_t_14, NULL, NULL, __pyx_t_12); - if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 992, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_14); - __pyx_t_14 = 0; + __pyx_t_6 = (__pyx_v_bit_count == 64); + if (__pyx_t_6) { - /* "dataRead.pyx":993 - * if buf: - * for name in buf.keys(): - * buf[name] = buf[name].view(dtype=numpy_format[name]) # <<<<<<<<<<<<<< - * # convert list to array for VLSD only - * if VLSD: + /* "dataRead.pyx":1055 + * cdef unsigned char temp5[5] + * if bit_count == 64: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte */ - if (unlikely(__pyx_v_buf == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 993, __pyx_L1_error) - } - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_buf, __pyx_v_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 993, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_view); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 993, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 993, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_numpy_format, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 993, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 993, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 993, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(__pyx_v_buf == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 993, __pyx_L1_error) - } - if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_v_name, __pyx_t_8) < 0))) __PYX_ERR(0, 993, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":1056 + * if bit_count == 64: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * if swap == 0: + */ + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + + /* "dataRead.pyx":1057 + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * if swap == 0: + * return buf + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":991 - * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) - * # changing from bytes type to desired type - * if buf: # <<<<<<<<<<<<<< - * for name in buf.keys(): - * buf[name] = buf[name].view(dtype=numpy_format[name]) + /* "dataRead.pyx":1058 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - } + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":995 - * buf[name] = buf[name].view(dtype=numpy_format[name]) - * # convert list to array for VLSD only - * if VLSD: # <<<<<<<<<<<<<< - * for channel_name in VLSD: - * VLSD[channel_name] = np.array(VLSD[channel_name]) + /* "dataRead.pyx":1059 + * buf[i] = temp8byte + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_VLSD); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 995, __pyx_L1_error) - if (__pyx_t_7) { + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":996 - * # convert list to array for VLSD only - * if VLSD: - * for channel_name in VLSD: # <<<<<<<<<<<<<< - * VLSD[channel_name] = np.array(VLSD[channel_name]) - * buf.update(VLSD) + /* "dataRead.pyx":1058 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - __pyx_t_11 = 0; - if (unlikely(__pyx_v_VLSD == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 996, __pyx_L1_error) } - __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_VLSD, 1, ((PyObject *)NULL), (&__pyx_t_3), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 996, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_6); - __pyx_t_6 = __pyx_t_8; - __pyx_t_8 = 0; - while (1) { - __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_3, &__pyx_t_11, &__pyx_t_8, NULL, NULL, __pyx_t_12); - if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 996, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_8); - __pyx_t_8 = 0; - /* "dataRead.pyx":997 - * if VLSD: - * for channel_name in VLSD: - * VLSD[channel_name] = np.array(VLSD[channel_name]) # <<<<<<<<<<<<<< - * buf.update(VLSD) - * return buf + /* "dataRead.pyx":1061 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * elif n_bytes == 8: + * if swap == 0: */ - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 997, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 997, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(__pyx_v_VLSD == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 997, __pyx_L1_error) - } - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_VLSD, __pyx_v_channel_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 997, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __pyx_t_2 = NULL; - __pyx_t_9 = 0; + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; #if CYTHON_UNPACK_METHODS - if (unlikely(PyMethod_Check(__pyx_t_15))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_15); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); - __Pyx_INCREF(__pyx_t_2); + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_15, function); - __pyx_t_9 = 1; + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; } } #endif { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_14}; - __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 997, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - } - if (unlikely(__pyx_v_VLSD == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 997, __pyx_L1_error) + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1061, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_v_channel_name, __pyx_t_8) < 0))) __PYX_ERR(0, 997, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "dataRead.pyx":998 - * for channel_name in VLSD: - * VLSD[channel_name] = np.array(VLSD[channel_name]) - * buf.update(VLSD) # <<<<<<<<<<<<<< - * return buf - * - */ - __pyx_t_6 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_buf, __pyx_v_VLSD); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 998, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":995 - * buf[name] = buf[name].view(dtype=numpy_format[name]) - * # convert list to array for VLSD only - * if VLSD: # <<<<<<<<<<<<<< - * for channel_name in VLSD: - * VLSD[channel_name] = np.array(VLSD[channel_name]) + /* "dataRead.pyx":1054 + * cdef unsigned char temp6[6] + * cdef unsigned char temp5[5] + * if bit_count == 64: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ } - /* "dataRead.pyx":999 - * VLSD[channel_name] = np.array(VLSD[channel_name]) - * buf.update(VLSD) - * return buf # <<<<<<<<<<<<<< - * - * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, + /* "dataRead.pyx":1062 + * else: + * return buf.byteswap() + * elif n_bytes == 8: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_buf); - __pyx_r = __pyx_v_buf; - goto __pyx_L0; + __pyx_t_6 = (__pyx_v_n_bytes == 8); + if (__pyx_t_6) { - /* "dataRead.pyx":897 - * return buf.byteswap() - * - * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< - * const unsigned short record_id_size, - * const unsigned long long data_block_length): + /* "dataRead.pyx":1063 + * return buf.byteswap() + * elif n_bytes == 8: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_AddTraceback("dataRead.unsorted_data_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_buf); - __Pyx_XDECREF(__pyx_v_VLSD); - __Pyx_XDECREF(__pyx_v_pos_byte_beg); - __Pyx_XDECREF(__pyx_v_pos_byte_end); - __Pyx_XDECREF(__pyx_v_c_format_structure); - __Pyx_XDECREF(__pyx_v_byte_length); - __Pyx_XDECREF(__pyx_v_numpy_format); - __Pyx_XDECREF(__pyx_v_index); - __Pyx_XDECREF(__pyx_v_CGrecordLength); - __Pyx_XDECREF(__pyx_v_VLSD_flag); - __Pyx_XDECREF(__pyx_v_VLSD_CG_name); - __Pyx_XDECREF(__pyx_v_VLSD_CG_signal_data_type); - __Pyx_XDECREF(__pyx_v_channel_name_set); - __Pyx_XDECREF(__pyx_v_record_id); - __Pyx_XDECREF(__pyx_v_Channel); - __Pyx_XDECREF(__pyx_v_name); - __Pyx_XDECREF(__pyx_v_channel_name); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":1064 + * elif n_bytes == 8: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; -/* "dataRead.pyx":1001 - * return buf - * - * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< - * unsigned short record_id_size, unsigned long long position, - * buf, VLSD, pos_byte_beg, pos_byte_end, c_format_structure, + /* "dataRead.pyx":1065 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__pyx_v_bit_stream, PyObject *__pyx_v_tmp, PyObject *__pyx_v_record_id, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_position, PyObject *__pyx_v_buf, PyObject *__pyx_v_VLSD, PyObject *__pyx_v_pos_byte_beg, PyObject *__pyx_v_pos_byte_end, CYTHON_UNUSED PyObject *__pyx_v_c_format_structure, PyObject *__pyx_v_index, PyObject *__pyx_v_CGrecordLength, PyObject *__pyx_v_VLSD_flag, PyObject *__pyx_v_VLSD_CG_name, PyObject *__pyx_v_VLSD_CG_signal_data_type, PyObject *__pyx_v_channel_name_set) { - unsigned long __pyx_v_VLSDLen; - PyObject *__pyx_v_channel_name = NULL; - PyObject *__pyx_v_signal_data_type = NULL; - PyObject *__pyx_v_temp = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - PyObject *(*__pyx_t_6)(PyObject *); - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - Py_ssize_t __pyx_t_9; - Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - unsigned PY_LONG_LONG __pyx_t_12; - int __pyx_t_13; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("unsorted_read4", 1); + /* "dataRead.pyx":1067 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1006 - * index, CGrecordLength, VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, - * channel_name_set): - * cdef unsigned long VLSDLen = 0 # <<<<<<<<<<<<<< - * if not VLSD_flag[record_id]: # not VLSD CG) - * for channel_name in channel_name_set[record_id]: # list of channel classes + /* "dataRead.pyx":1068 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 64: */ - __pyx_v_VLSDLen = 0; + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1007 - * channel_name_set): - * cdef unsigned long VLSDLen = 0 - * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< - * for channel_name in channel_name_set[record_id]: # list of channel classes - * buf[channel_name][index[record_id]] = \ + /* "dataRead.pyx":1067 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_flag, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1007, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1007, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_3 = (!__pyx_t_2); - if (__pyx_t_3) { + } - /* "dataRead.pyx":1008 - * cdef unsigned long VLSDLen = 0 - * if not VLSD_flag[record_id]: # not VLSD CG) - * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< - * buf[channel_name][index[record_id]] = \ - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + /* "dataRead.pyx":1070 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_channel_name_set, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { - __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); - __pyx_t_5 = 0; - __pyx_t_6 = NULL; - } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1008, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1008, __pyx_L1_error) - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - for (;;) { - if (likely(!__pyx_t_6)) { - if (likely(PyList_CheckExact(__pyx_t_4))) { - { - Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); - #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1008, __pyx_L1_error) - #endif - if (__pyx_t_5 >= __pyx_temp) break; - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1008, __pyx_L1_error) - #else - __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - } else { - { - Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); - #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1008, __pyx_L1_error) - #endif - if (__pyx_t_5 >= __pyx_temp) break; - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1008, __pyx_L1_error) - #else - __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1008, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - #endif - } - } else { - __pyx_t_1 = __pyx_t_6(__pyx_t_4); - if (unlikely(!__pyx_t_1)) { - PyObject* exc_type = PyErr_Occurred(); - if (exc_type) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 1008, __pyx_L1_error) - } - break; - } - __Pyx_GOTREF(__pyx_t_1); - } - __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_1); - __pyx_t_1 = 0; + __pyx_t_6 = (__pyx_v_bit_count < 64); + if (__pyx_t_6) { - /* "dataRead.pyx":1010 - * for channel_name in channel_name_set[record_id]: # list of channel classes - * buf[channel_name][index[record_id]] = \ - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] # <<<<<<<<<<<<<< - * index[record_id] += 1 - * position += CGrecordLength[record_id] + /* "dataRead.pyx":1071 + * # mask left part + * if bit_count < 64: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: */ - if (unlikely(__pyx_v_tmp == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1010, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_beg, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1010, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1010, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_3 = (__pyx_t_8 == Py_None); - if (__pyx_t_3) { - __pyx_t_9 = 0; - } else { - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L1_error) - __pyx_t_9 = __pyx_t_10; - } - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1010, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_end, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1010, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_3 = (__pyx_t_1 == Py_None); - if (__pyx_t_3) { - __pyx_t_10 = PY_SSIZE_T_MAX; - } else { - __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1010, __pyx_L1_error) - __pyx_t_10 = __pyx_t_11; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PySequence_GetSlice(__pyx_v_tmp, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1010, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1009 - * if not VLSD_flag[record_id]: # not VLSD CG) - * for channel_name in channel_name_set[record_id]: # list of channel classes - * buf[channel_name][index[record_id]] = \ # <<<<<<<<<<<<<< - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] - * index[record_id] += 1 + /* "dataRead.pyx":1070 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_buf, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1009, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1009, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_t_8, __pyx_t_1) < 0))) __PYX_ERR(0, 1009, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + } - /* "dataRead.pyx":1008 - * cdef unsigned long VLSDLen = 0 - * if not VLSD_flag[record_id]: # not VLSD CG) - * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< - * buf[channel_name][index[record_id]] = \ - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + /* "dataRead.pyx":1072 + * if bit_count < 64: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } - /* "dataRead.pyx":1011 - * buf[channel_name][index[record_id]] = \ - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] - * index[record_id] += 1 # <<<<<<<<<<<<<< - * position += CGrecordLength[record_id] - * else: # VLSD CG + /* "dataRead.pyx":1063 + * return buf.byteswap() + * elif n_bytes == 8: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __Pyx_INCREF(__pyx_v_record_id); - __pyx_t_4 = __pyx_v_record_id; - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1011, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely((PyObject_SetItem(__pyx_v_index, __pyx_t_4, __pyx_t_8) < 0))) __PYX_ERR(0, 1011, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + goto __pyx_L7; + } - /* "dataRead.pyx":1012 - * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] - * index[record_id] += 1 - * position += CGrecordLength[record_id] # <<<<<<<<<<<<<< - * else: # VLSD CG - * position += record_id_size + /* "dataRead.pyx":1074 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ */ - __pyx_t_4 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_CGrecordLength, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_12 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_1); if (unlikely((__pyx_t_12 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1012, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_position = __pyx_t_12; + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1007 - * channel_name_set): - * cdef unsigned long VLSDLen = 0 - * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< - * for channel_name in channel_name_set[record_id]: # list of channel classes - * buf[channel_name][index[record_id]] = \ + /* "dataRead.pyx":1075 + * else: + * for i in range(number_of_records): + * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * temp8[2]<<40 | temp8[3]<<32 | \ */ - goto __pyx_L3; - } + (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1014 - * position += CGrecordLength[record_id] - * else: # VLSD CG - * position += record_id_size # <<<<<<<<<<<<<< - * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length - * position += 4 + /* "dataRead.pyx":1078 + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * temp8[2]<<40 | temp8[3]<<32 | \ + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - /*else*/ { - __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_record_id_size)); + __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); - /* "dataRead.pyx":1015 - * else: # VLSD CG - * position += record_id_size - * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length # <<<<<<<<<<<<<< - * position += 4 - * signal_data_type = VLSD_CG_signal_data_type[record_id] + /* "dataRead.pyx":1080 + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - (void)(memcpy((&__pyx_v_VLSDLen), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1016 - * position += record_id_size - * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length - * position += 4 # <<<<<<<<<<<<<< - * signal_data_type = VLSD_CG_signal_data_type[record_id] - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + /* "dataRead.pyx":1081 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 64: */ - __pyx_v_position = (__pyx_v_position + 4); + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1017 - * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length - * position += 4 - * signal_data_type = VLSD_CG_signal_data_type[record_id] # <<<<<<<<<<<<<< - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes - * if signal_data_type == 6: + /* "dataRead.pyx":1080 + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_signal_data_type = __pyx_t_1; - __pyx_t_1 = 0; + } - /* "dataRead.pyx":1018 - * position += 4 - * signal_data_type = VLSD_CG_signal_data_type[record_id] - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes # <<<<<<<<<<<<<< - * if signal_data_type == 6: - * temp = temp.decode('ISO8859') + /* "dataRead.pyx":1083 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_position, ((__pyx_v_position + __pyx_v_VLSDLen) - 1) - __pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1018, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1018, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_temp = __pyx_t_8; - __pyx_t_8 = 0; + __pyx_t_6 = (__pyx_v_bit_count < 64); + if (__pyx_t_6) { - /* "dataRead.pyx":1019 - * signal_data_type = VLSD_CG_signal_data_type[record_id] - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: + /* "dataRead.pyx":1084 + * # mask left part + * if bit_count < 64: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 7: */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_6, 6, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1019, __pyx_L1_error) - if (__pyx_t_3) { + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1020 - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes - * if signal_data_type == 6: - * temp = temp.decode('ISO8859') # <<<<<<<<<<<<<< - * elif signal_data_type == 7: - * temp = temp.decode('utf-8') + /* "dataRead.pyx":1083 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1020, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); - __pyx_t_8 = 0; + } - /* "dataRead.pyx":1019 - * signal_data_type = VLSD_CG_signal_data_type[record_id] - * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: + /* "dataRead.pyx":1085 + * if bit_count < 64: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 7: + * if swap == 0: */ - goto __pyx_L7; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } } + __pyx_L7:; - /* "dataRead.pyx":1021 - * if signal_data_type == 6: - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: # <<<<<<<<<<<<<< - * temp = temp.decode('utf-8') - * elif signal_data_type == 8: + /* "dataRead.pyx":1062 + * else: + * return buf.byteswap() + * elif n_bytes == 8: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_7, 7, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1021, __pyx_L1_error) - if (__pyx_t_3) { + goto __pyx_L3; + } - /* "dataRead.pyx":1022 - * temp = temp.decode('ISO8859') - * elif signal_data_type == 7: - * temp = temp.decode('utf-8') # <<<<<<<<<<<<<< - * elif signal_data_type == 8: - * temp = temp.decode('utf-16') + /* "dataRead.pyx":1089 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1024, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); - __pyx_t_8 = 0; + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1023 - * elif signal_data_type == 7: - * temp = temp.decode('utf-8') - * elif signal_data_type == 8: # <<<<<<<<<<<<<< - * temp = temp.decode(' 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - goto __pyx_L7; - } + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1025 - * elif signal_data_type == 8: - * temp = temp.decode('utf-16') - * VLSD[VLSD_CG_name[record_id]].append(temp) + /* "dataRead.pyx":1092 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 56: */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_9, 9, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1025, __pyx_L1_error) - if (__pyx_t_3) { + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1026 - * temp = temp.decode('utf-16') # <<<<<<<<<<<<<< - * VLSD[VLSD_CG_name[record_id]].append(temp) - * position += VLSDLen + /* "dataRead.pyx":1091 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1026, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); - __pyx_t_8 = 0; + } - /* "dataRead.pyx":1025 - * elif signal_data_type == 8: - * temp = temp.decode('utf-16') - * VLSD[VLSD_CG_name[record_id]].append(temp) + /* "dataRead.pyx":1094 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - } - __pyx_L7:; + __pyx_t_6 = (__pyx_v_bit_count < 56); + if (__pyx_t_6) { - /* "dataRead.pyx":1027 - * elif signal_data_type == 9: - * temp = temp.decode('>utf-16') - * VLSD[VLSD_CG_name[record_id]].append(temp) # <<<<<<<<<<<<<< - * position += VLSDLen - * return position, buf, VLSD, index + /* "dataRead.pyx":1095 + * # mask left part + * if bit_count < 56: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: */ - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1027, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1027, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_13 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_temp); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1027, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1028 - * temp = temp.decode('>utf-16') - * VLSD[VLSD_CG_name[record_id]].append(temp) - * position += VLSDLen # <<<<<<<<<<<<<< - * return position, buf, VLSD, index - * + /* "dataRead.pyx":1094 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_VLSDLen)); - } - __pyx_L3:; + } - /* "dataRead.pyx":1029 - * VLSD[VLSD_CG_name[record_id]].append(temp) - * position += VLSDLen - * return position, buf, VLSD, index # <<<<<<<<<<<<<< - * - * + /* "dataRead.pyx":1096 + * if bit_count < 56: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1029, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1029, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1)) __PYX_ERR(0, 1029, __pyx_L1_error); - __Pyx_INCREF(__pyx_v_buf); - __Pyx_GIVEREF(__pyx_v_buf); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_buf)) __PYX_ERR(0, 1029, __pyx_L1_error); - __Pyx_INCREF(__pyx_v_VLSD); - __Pyx_GIVEREF(__pyx_v_VLSD); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_VLSD)) __PYX_ERR(0, 1029, __pyx_L1_error); - __Pyx_INCREF(__pyx_v_index); - __Pyx_GIVEREF(__pyx_v_index); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_index)) __PYX_ERR(0, 1029, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L0; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } - /* "dataRead.pyx":1001 - * return buf - * - * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< - * unsigned short record_id_size, unsigned long long position, - * buf, VLSD, pos_byte_beg, pos_byte_end, c_format_structure, + /* "dataRead.pyx":1087 + * buf[i] = temp8byte + * elif n_bytes == 7: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ + goto __pyx_L16; + } - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("dataRead.unsorted_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_channel_name); - __Pyx_XDECREF(__pyx_v_signal_data_type); - __Pyx_XDECREF(__pyx_v_temp); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":1032 - * - * - * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< - * unsigned long long sd_block_length, unsigned long long n_records): - * """ Reads vlsd channel from its SD Block bytes + /* "dataRead.pyx":1098 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ */ + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; -/* Python wrapper */ -static PyObject *__pyx_pw_8dataRead_5sd_data_read(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -PyDoc_STRVAR(__pyx_doc_8dataRead_4sd_data_read, " Reads vlsd channel from its SD Block bytes\n\n Parameters\n ----------------\n signal_data_type : int\n\n sd_block : bytes\n SD Block bytes\n\n sd_block_length: int\n SD Block data length (header not included)\n\n n_records: int\n number of records\n\n Returns\n -----------\n array\n "); -static PyMethodDef __pyx_mdef_8dataRead_5sd_data_read = {"sd_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_5sd_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_4sd_data_read}; -static PyObject *__pyx_pw_8dataRead_5sd_data_read(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - unsigned short __pyx_v_signal_data_type; - PyObject *__pyx_v_sd_block = 0; - CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length; - unsigned PY_LONG_LONG __pyx_v_n_records; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[4] = {0,0,0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("sd_data_read (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signal_data_type,&__pyx_n_s_sd_block,&__pyx_n_s_sd_block_length,&__pyx_n_s_n_records,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sd_block)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 1); __PYX_ERR(0, 1032, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sd_block_length)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 2); __PYX_ERR(0, 1032, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_records)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 3); __PYX_ERR(0, 1032, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sd_data_read") < 0)) __PYX_ERR(0, 1032, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 4)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - } - __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1032, __pyx_L3_error) - __pyx_v_sd_block = ((PyObject*)values[1]); - __pyx_v_sd_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_sd_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1033, __pyx_L3_error) - __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[3]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1033, __pyx_L3_error) - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1032, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("dataRead.sd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sd_block), (&PyBytes_Type), 1, "sd_block", 1))) __PYX_ERR(0, 1032, __pyx_L1_error) - __pyx_r = __pyx_pf_8dataRead_4sd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_sd_block, __pyx_v_sd_block_length, __pyx_v_n_records); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_8dataRead_4sd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_sd_block, CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length, unsigned PY_LONG_LONG __pyx_v_n_records) { - char const *__pyx_v_bit_stream; - unsigned long __pyx_v_max_len; - unsigned long __pyx_v_vlsd_len; - unsigned long *__pyx_v_VLSDLen; - unsigned PY_LONG_LONG *__pyx_v_pointer; - unsigned PY_LONG_LONG __pyx_v_rec; - PyObject *__pyx_v_channel_format = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - char *__pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - unsigned PY_LONG_LONG __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - char const *__pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("sd_data_read", 1); + /* "dataRead.pyx":1099 + * else: + * for i in range(number_of_records): + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + */ + (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1053 - * array - * """ - * cdef const char* bit_stream = PyBytes_AsString(sd_block) # <<<<<<<<<<<<<< - * cdef unsigned long max_len = 0 - * cdef unsigned long vlsd_len = 0 + /* "dataRead.pyx":1101 + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_sd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1053, __pyx_L1_error) - __pyx_v_bit_stream = __pyx_t_1; + __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); - /* "dataRead.pyx":1054 - * """ - * cdef const char* bit_stream = PyBytes_AsString(sd_block) - * cdef unsigned long max_len = 0 # <<<<<<<<<<<<<< - * cdef unsigned long vlsd_len = 0 - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + /* "dataRead.pyx":1103 + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_v_max_len = 0; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1055 - * cdef const char* bit_stream = PyBytes_AsString(sd_block) - * cdef unsigned long max_len = 0 - * cdef unsigned long vlsd_len = 0 # <<<<<<<<<<<<<< - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + /* "dataRead.pyx":1104 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 56: */ - __pyx_v_vlsd_len = 0; + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1056 - * cdef unsigned long max_len = 0 - * cdef unsigned long vlsd_len = 0 - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) # <<<<<<<<<<<<<< - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) - * cdef unsigned long long rec = 0 + /* "dataRead.pyx":1103 + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_v_VLSDLen = ((unsigned long *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned long))))); + } - /* "dataRead.pyx":1057 - * cdef unsigned long vlsd_len = 0 - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) # <<<<<<<<<<<<<< - * cdef unsigned long long rec = 0 - * if not VLSDLen or not pointer: + /* "dataRead.pyx":1106 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_v_pointer = ((unsigned PY_LONG_LONG *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned PY_LONG_LONG))))); + __pyx_t_6 = (__pyx_v_bit_count < 56); + if (__pyx_t_6) { - /* "dataRead.pyx":1058 - * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) - * cdef unsigned long long rec = 0 # <<<<<<<<<<<<<< - * if not VLSDLen or not pointer: - * raise MemoryError() + /* "dataRead.pyx":1107 + * # mask left part + * if bit_count < 56: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 6: */ - __pyx_v_rec = 0; + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1059 - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) - * cdef unsigned long long rec = 0 - * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< - * raise MemoryError() - * try: + /* "dataRead.pyx":1106 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_3 = (!(__pyx_v_VLSDLen != 0)); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_3 = (!(__pyx_v_pointer != 0)); - __pyx_t_2 = __pyx_t_3; - __pyx_L4_bool_binop_done:; - if (unlikely(__pyx_t_2)) { + } - /* "dataRead.pyx":1060 - * cdef unsigned long long rec = 0 - * if not VLSDLen or not pointer: - * raise MemoryError() # <<<<<<<<<<<<<< - * try: - * pointer[0] = 0 + /* "dataRead.pyx":1108 + * if bit_count < 56: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 6: + * if swap == 0: */ - PyErr_NoMemory(); __PYX_ERR(0, 1060, __pyx_L1_error) + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } + } + __pyx_L16:; - /* "dataRead.pyx":1059 - * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) - * cdef unsigned long long rec = 0 - * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< - * raise MemoryError() - * try: + /* "dataRead.pyx":1086 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 7: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ + goto __pyx_L3; } - /* "dataRead.pyx":1061 - * if not VLSDLen or not pointer: - * raise MemoryError() - * try: # <<<<<<<<<<<<<< - * pointer[0] = 0 - * VLSDLen[0] = 0 + /* "dataRead.pyx":1109 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 6: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - /*try:*/ { + __pyx_t_6 = (__pyx_v_n_bytes == 6); + if (__pyx_t_6) { - /* "dataRead.pyx":1062 - * raise MemoryError() - * try: - * pointer[0] = 0 # <<<<<<<<<<<<<< - * VLSDLen[0] = 0 - * for rec from 0 <= rec < n_records - 1 by 1: + /* "dataRead.pyx":1110 + * buf[i] = temp8byte + * elif n_bytes == 6: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - (__pyx_v_pointer[0]) = 0; + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1063 - * try: - * pointer[0] = 0 - * VLSDLen[0] = 0 # <<<<<<<<<<<<<< - * for rec from 0 <= rec < n_records - 1 by 1: - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + /* "dataRead.pyx":1111 + * elif n_bytes == 6: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift */ - (__pyx_v_VLSDLen[0]) = 0; + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1064 - * pointer[0] = 0 - * VLSDLen[0] = 0 - * for rec from 0 <= rec < n_records - 1 by 1: # <<<<<<<<<<<<<< - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len + /* "dataRead.pyx":1112 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_4 = (__pyx_v_n_records - 1); - for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_4; __pyx_v_rec+=1) { + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1065 - * VLSDLen[0] = 0 - * for rec from 0 <= rec < n_records - 1 by 1: - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< - * VLSDLen[rec] = vlsd_len - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + /* "dataRead.pyx":1114 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1066 - * for rec from 0 <= rec < n_records - 1 by 1: - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] - * if VLSDLen[rec] > max_len: + /* "dataRead.pyx":1115 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 48: */ - (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1067 - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] # <<<<<<<<<<<<<< - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] + /* "dataRead.pyx":1114 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - (__pyx_v_pointer[(__pyx_v_rec + 1)]) = (((__pyx_v_VLSDLen[__pyx_v_rec]) + 4) + (__pyx_v_pointer[__pyx_v_rec])); + } - /* "dataRead.pyx":1068 - * VLSDLen[rec] = vlsd_len - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] - * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< - * max_len = VLSDLen[rec] - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + /* "dataRead.pyx":1117 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); - if (__pyx_t_2) { + __pyx_t_6 = (__pyx_v_bit_count < 48); + if (__pyx_t_6) { - /* "dataRead.pyx":1069 - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len + /* "dataRead.pyx":1118 + * # mask left part + * if bit_count < 48: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: */ - __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1068 - * VLSDLen[rec] = vlsd_len - * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] - * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< - * max_len = VLSDLen[rec] - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + /* "dataRead.pyx":1117 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":1119 + * if bit_count < 48: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - } - /* "dataRead.pyx":1070 - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< - * VLSDLen[rec] = vlsd_len - * if VLSDLen[rec] > max_len: + /* "dataRead.pyx":1110 + * buf[i] = temp8byte + * elif n_bytes == 6: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); + goto __pyx_L25; + } - /* "dataRead.pyx":1071 - * max_len = VLSDLen[rec] - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] + /* "dataRead.pyx":1121 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ */ - (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1072 - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len - * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< - * max_len = VLSDLen[rec] - * if max_len != 0: + /* "dataRead.pyx":1122 + * else: + * for i in range(number_of_records): + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes */ - __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); - if (__pyx_t_2) { + (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1073 - * VLSDLen[rec] = vlsd_len - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< - * if max_len != 0: - * if signal_data_type < 10 or signal_data_type == 17: + /* "dataRead.pyx":1124 + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); + __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); - /* "dataRead.pyx":1072 - * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) - * VLSDLen[rec] = vlsd_len - * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< - * max_len = VLSDLen[rec] - * if max_len != 0: + /* "dataRead.pyx":1126 + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - } + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1074 - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] - * if max_len != 0: # <<<<<<<<<<<<<< - * if signal_data_type < 10 or signal_data_type == 17: - * if signal_data_type == 6: + /* "dataRead.pyx":1127 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 48: */ - __pyx_t_2 = (__pyx_v_max_len != 0); - if (__pyx_t_2) { + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1075 - * max_len = VLSDLen[rec] - * if max_len != 0: - * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< - * if signal_data_type == 6: - * channel_format = 'ISO8859' + /* "dataRead.pyx":1126 + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_3 = (__pyx_v_signal_data_type < 10); - if (!__pyx_t_3) { - } else { - __pyx_t_2 = __pyx_t_3; - goto __pyx_L15_bool_binop_done; - } - __pyx_t_3 = (__pyx_v_signal_data_type == 17); - __pyx_t_2 = __pyx_t_3; - __pyx_L15_bool_binop_done:; - if (__pyx_t_2) { + } - /* "dataRead.pyx":1076 - * if max_len != 0: - * if signal_data_type < 10 or signal_data_type == 17: - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * channel_format = 'ISO8859' - * elif signal_data_type == 7: + /* "dataRead.pyx":1129 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - switch (__pyx_v_signal_data_type) { - case 6: + __pyx_t_6 = (__pyx_v_bit_count < 48); + if (__pyx_t_6) { - /* "dataRead.pyx":1077 - * if signal_data_type < 10 or signal_data_type == 17: - * if signal_data_type == 6: - * channel_format = 'ISO8859' # <<<<<<<<<<<<<< - * elif signal_data_type == 7: - * channel_format = 'utf-8' + /* "dataRead.pyx":1130 + * # mask left part + * if bit_count < 48: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 5: */ - __Pyx_INCREF(__pyx_n_u_ISO8859); - __pyx_v_channel_format = __pyx_n_u_ISO8859; + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1076 - * if max_len != 0: - * if signal_data_type < 10 or signal_data_type == 17: - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * channel_format = 'ISO8859' - * elif signal_data_type == 7: + /* "dataRead.pyx":1129 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - break; - case 7: + } - /* "dataRead.pyx":1079 - * channel_format = 'ISO8859' - * elif signal_data_type == 7: - * channel_format = 'utf-8' # <<<<<<<<<<<<<< - * elif signal_data_type == 8: - * channel_format = 'pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } + } + __pyx_L25:; - /* "dataRead.pyx":1078 - * if signal_data_type == 6: - * channel_format = 'ISO8859' - * elif signal_data_type == 7: # <<<<<<<<<<<<<< - * channel_format = 'utf-8' - * elif signal_data_type == 8: + /* "dataRead.pyx":1109 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 6: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - break; - case 8: + goto __pyx_L3; + } - /* "dataRead.pyx":1081 - * channel_format = 'utf-8' - * elif signal_data_type == 8: - * channel_format = ' 0: */ - break; - case 17: + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1085 - * channel_format = '>utf-16' - * elif signal_data_type == 17: - * channel_format = 'bom' # BOM-per-value detection # <<<<<<<<<<<<<< - * else: - * channel_format = 'utf-8' + /* "dataRead.pyx":1137 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __Pyx_INCREF(__pyx_n_u_bom); - __pyx_v_channel_format = __pyx_n_u_bom; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1084 - * elif signal_data_type == 9: - * channel_format = '>utf-16' - * elif signal_data_type == 17: # <<<<<<<<<<<<<< - * channel_format = 'bom' # BOM-per-value detection - * else: + /* "dataRead.pyx":1138 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 32: */ - break; - default: + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1087 - * channel_format = 'bom' # BOM-per-value detection - * else: - * channel_format = 'utf-8' # <<<<<<<<<<<<<< - * printf('signal_data_type should have fixed length') - * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) + /* "dataRead.pyx":1137 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __Pyx_INCREF(__pyx_kp_u_utf_8); - __pyx_v_channel_format = __pyx_kp_u_utf_8; + } - /* "dataRead.pyx":1088 - * else: - * channel_format = 'utf-8' - * printf('signal_data_type should have fixed length') # <<<<<<<<<<<<<< - * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) - * else: # byte arrays or mime types + /* "dataRead.pyx":1140 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - (void)(printf(((char const *)"signal_data_type should have fixed length"))); - break; - } + __pyx_t_6 = (__pyx_v_bit_count < 32); + if (__pyx_t_6) { - /* "dataRead.pyx":1089 - * channel_format = 'utf-8' - * printf('signal_data_type should have fixed length') - * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) # <<<<<<<<<<<<<< - * else: # byte arrays or mime types - * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) + /* "dataRead.pyx":1141 + * # mask left part + * if bit_count < 32: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __pyx_f_8dataRead_equalize_string_length(__pyx_v_bit_stream, __pyx_v_pointer, __pyx_v_VLSDLen, __pyx_v_max_len, __pyx_v_n_records, __pyx_v_channel_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1089, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L6_return; + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1075 - * max_len = VLSDLen[rec] - * if max_len != 0: - * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< - * if signal_data_type == 6: - * channel_format = 'ISO8859' + /* "dataRead.pyx":1140 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte */ - } + } - /* "dataRead.pyx":1091 - * return equalize_string_length(bit_stream, pointer, VLSDLen, max_len, n_records, channel_format) - * else: # byte arrays or mime types - * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) # <<<<<<<<<<<<<< + /* "dataRead.pyx":1142 + * if bit_count < 32: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< * else: - * printf('VLSD channel could not be properly read\n') + * for i in range(number_of_records): */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __pyx_f_8dataRead_equalize_byte_length(__pyx_v_bit_stream, __pyx_v_pointer, __pyx_v_VLSDLen, __pyx_v_max_len, __pyx_v_n_records); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1091, __pyx_L7_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L6_return; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1074 - * if VLSDLen[rec] > max_len: - * max_len = VLSDLen[rec] - * if max_len != 0: # <<<<<<<<<<<<<< - * if signal_data_type < 10 or signal_data_type == 17: - * if signal_data_type == 6: + /* "dataRead.pyx":1133 + * buf[i] = temp8byte + * elif n_bytes == 5: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ + goto __pyx_L34; } - /* "dataRead.pyx":1093 - * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) + /* "dataRead.pyx":1144 + * buf[i] = temp8byte * else: - * printf('VLSD channel could not be properly read\n') # <<<<<<<<<<<<<< - * return None - * finally: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ */ /*else*/ { - (void)(printf(((char const *)"VLSD channel could not be properly read\n"))); + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1094 + /* "dataRead.pyx":1145 * else: - * printf('VLSD channel could not be properly read\n') - * return None # <<<<<<<<<<<<<< - * finally: - * PyMem_Free(pointer) + * for i in range(number_of_records): + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L6_return; - } - } + (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1096 - * return None - * finally: - * PyMem_Free(pointer) # <<<<<<<<<<<<<< - * PyMem_Free(VLSDLen) - * + /* "dataRead.pyx":1147 + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - /*finally:*/ { - __pyx_L7_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename; - { - PyMem_Free(__pyx_v_pointer); + __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); - /* "dataRead.pyx":1097 - * finally: - * PyMem_Free(pointer) - * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< - * - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + /* "dataRead.pyx":1149 + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - PyMem_Free(__pyx_v_VLSDLen); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - } - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11); - __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; - __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8; - goto __pyx_L1_error; - } - __pyx_L6_return: { - __pyx_t_14 = __pyx_r; - __pyx_r = 0; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1096 - * return None - * finally: - * PyMem_Free(pointer) # <<<<<<<<<<<<<< - * PyMem_Free(VLSDLen) - * + /* "dataRead.pyx":1150 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 32: */ - PyMem_Free(__pyx_v_pointer); + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1097 - * finally: - * PyMem_Free(pointer) - * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< + /* "dataRead.pyx":1149 + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + } + + /* "dataRead.pyx":1152 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_bit_count < 32); + if (__pyx_t_6) { + + /* "dataRead.pyx":1153 + * # mask left part + * if bit_count < 32: + * temp8byte &= mask # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * return buf + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + + /* "dataRead.pyx":1152 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 32: # <<<<<<<<<<<<<< + * temp8byte &= mask + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":1154 + * if bit_count < 32: + * temp8byte &= mask + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * return buf * - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, */ - PyMem_Free(__pyx_v_VLSDLen); - __pyx_r = __pyx_t_14; - __pyx_t_14 = 0; - goto __pyx_L0; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } } + __pyx_L34:; + + /* "dataRead.pyx":1132 + * temp8byte &= mask + * buf[i] = temp8byte + * elif n_bytes == 5: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): + */ } + __pyx_L3:; - /* "dataRead.pyx":1032 + /* "dataRead.pyx":1155 + * temp8byte &= mask + * buf[i] = temp8byte + * return buf # <<<<<<<<<<<<<< * + * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":1043 + * return buf * - * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< - * unsigned long long sd_block_length, unsigned long long n_records): - * """ Reads vlsd channel from its SD Block bytes + * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ /* function exit code */ __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("dataRead.sd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_unsigned_longlong", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + goto __pyx_L2; __pyx_L0:; - __Pyx_XDECREF(__pyx_v_channel_format); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "dataRead.pyx":1099 - * PyMem_Free(VLSDLen) +/* "dataRead.pyx":1157 + * return buf * - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const *__pyx_v_bit_stream, unsigned PY_LONG_LONG *__pyx_v_pointer, unsigned long *__pyx_v_VLSDLen, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records) { - PyArrayObject *__pyx_v_output = 0; - unsigned long __pyx_v_rec; +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_bit_count, unsigned char __pyx_v_bit_offset, unsigned long __pyx_v_n_bytes, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned PY_LONG_LONG __pyx_v_mask; + PY_LONG_LONG __pyx_v_temp8byte; + unsigned long __pyx_v_sign_bit; + unsigned PY_LONG_LONG __pyx_v_sign_bit_mask; + unsigned PY_LONG_LONG __pyx_v_sign_extend; + unsigned char __pyx_v_temp8[8]; + unsigned char __pyx_v_temp7[7]; + unsigned char __pyx_v_temp6[6]; + unsigned char __pyx_v_temp5[5]; + __Pyx_LocalBuf_ND __pyx_pybuffernd_buf; + __Pyx_Buffer __pyx_pybuffer_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; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - unsigned int __pyx_t_8; + PyArrayObject *__pyx_t_5 = NULL; + int __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + unsigned PY_LONG_LONG __pyx_t_8; unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned int __pyx_t_11; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("equalize_byte_length", 1); + __Pyx_RefNannySetupContext("read_signed_longlong", 1); + __pyx_pybuffer_buf.pybuffer.buf = NULL; + __pyx_pybuffer_buf.refcount = 0; + __pyx_pybuffernd_buf.data = NULL; + __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":1101 - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, - * unsigned long max_len, unsigned long long n_records): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + /* "dataRead.pyx":1160 + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): + * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long long mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1101, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1101, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L1_error); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1101, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1101, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1160, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1160, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1101, __pyx_L1_error) - __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1160, __pyx_L1_error) + __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); + { + __Pyx_BufFmt_StackElem __pyx_stack[1]; + if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { + __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; + __PYX_ERR(0, 1160, __pyx_L1_error) + } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; + } + } + __pyx_t_5 = 0; + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1102 - * unsigned long max_len, unsigned long long n_records): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) - * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') + /* "dataRead.pyx":1162 + * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< + * cdef long long temp8byte = 0 + * cdef unsigned long sign_bit = 0 */ - __pyx_v_rec = 0; + __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":1103 - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< - * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') - * return output + /* "dataRead.pyx":1163 + * cdef unsigned long long i + * cdef unsigned long long mask = ((1 << bit_count) - 1) + * cdef long long temp8byte = 0 # <<<<<<<<<<<<<< + * cdef unsigned long sign_bit = 0 + * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) */ - __pyx_t_9 = __pyx_v_n_records; - for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_9; __pyx_v_rec+=1) { + __pyx_v_temp8byte = 0; - /* "dataRead.pyx":1104 - * cdef unsigned long rec = 0 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< - * return output - * + /* "dataRead.pyx":1164 + * cdef unsigned long long mask = ((1 << bit_count) - 1) + * cdef long long temp8byte = 0 + * cdef unsigned long sign_bit = 0 # <<<<<<<<<<<<<< + * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_kp_b__13}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_4, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1104, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } + __pyx_v_sign_bit = 0; - /* "dataRead.pyx":1105 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') - * return output # <<<<<<<<<<<<<< - * - * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + /* "dataRead.pyx":1165 + * cdef long long temp8byte = 0 + * cdef unsigned long sign_bit = 0 + * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< + * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count + * cdef unsigned char temp8[8] */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_output); - __pyx_r = ((PyObject *)__pyx_v_output); - goto __pyx_L0; + __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":1099 - * PyMem_Free(VLSDLen) - * - * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + /* "dataRead.pyx":1166 + * cdef unsigned long sign_bit = 0 + * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) + * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< + * cdef unsigned char temp8[8] + * cdef unsigned char temp7[7] */ + __pyx_v_sign_extend = (((1 << (64 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* 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_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("dataRead.equalize_byte_length", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_output); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":1107 - * return output - * - * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records, channel_format): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) + /* "dataRead.pyx":1171 + * cdef unsigned char temp6[6] + * cdef unsigned char temp5[5] + * if bit_count == 64: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ + __pyx_t_6 = (__pyx_v_bit_count == 64); + if (__pyx_t_6) { -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char const *__pyx_v_bit_stream, unsigned PY_LONG_LONG *__pyx_v_pointer, unsigned long *__pyx_v_VLSDLen, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records, PyObject *__pyx_v_channel_format) { - PyArrayObject *__pyx_v_output = 0; - unsigned long __pyx_v_rec; - PyObject *__pyx_v_raw = 0; - 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; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - unsigned int __pyx_t_8; - int __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - Py_ssize_t __pyx_t_11; - int __pyx_t_12; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("equalize_string_length", 1); - - /* "dataRead.pyx":1109 - * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, - * unsigned long max_len, unsigned long long n_records, channel_format): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< - * cdef unsigned long rec = 0 - * cdef bytes raw + /* "dataRead.pyx":1172 + * cdef unsigned char temp5[5] + * if bit_count == 64: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1109, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1109, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1109, __pyx_L1_error) - __pyx_v_output = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1110 - * unsigned long max_len, unsigned long long n_records, channel_format): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) - * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< - * cdef bytes raw - * if channel_format == 'bom': + /* "dataRead.pyx":1173 + * if bit_count == 64: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * if swap == 0: */ - __pyx_v_rec = 0; + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1112 - * cdef unsigned long rec = 0 - * cdef bytes raw - * if channel_format == 'bom': # <<<<<<<<<<<<<< - * # signal_data_type 17: detect BOM per value - * for rec from 0 <= rec < n_records by 1: + /* "dataRead.pyx":1174 + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * if swap == 0: + * return buf */ - __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_channel_format, __pyx_n_u_bom, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1112, __pyx_L1_error) - if (__pyx_t_9) { + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } - /* "dataRead.pyx":1114 - * if channel_format == 'bom': - * # signal_data_type 17: detect BOM per value - * for rec from 0 <= rec < n_records by 1: # <<<<<<<<<<<<<< - * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) - * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + /* "dataRead.pyx":1175 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - __pyx_t_10 = __pyx_v_n_records; - for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_10; __pyx_v_rec+=1) { + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1115 - * # signal_data_type 17: detect BOM per value - * for rec from 0 <= rec < n_records by 1: - * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) # <<<<<<<<<<<<<< - * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: - * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1176 + * buf[i] = temp8byte + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1115, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1115, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF_SET(__pyx_v_raw, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; - /* "dataRead.pyx":1116 - * for rec from 0 <= rec < n_records by 1: - * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) - * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< - * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + /* "dataRead.pyx":1175 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * buf[i] = temp8byte + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: */ - __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1116, __pyx_L1_error) - __pyx_t_12 = (__pyx_t_11 >= 3); - if (__pyx_t_12) { - } else { - __pyx_t_9 = __pyx_t_12; - goto __pyx_L7_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1116, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_12) { - } else { - __pyx_t_9 = __pyx_t_12; - goto __pyx_L7_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1116, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_12) { - } else { - __pyx_t_9 = __pyx_t_12; - goto __pyx_L7_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1116, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1116, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = __pyx_t_12; - __pyx_L7_bool_binop_done:; - if (__pyx_t_9) { + } - /* "dataRead.pyx":1117 - * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) - * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: - * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1178 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * elif n_bytes == 8: + * if swap == 0: */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1117, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1117, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1117, __pyx_L1_error) + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = NULL; + __pyx_t_11 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + __pyx_t_11 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1178, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1117, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1117, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1117, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1117, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1117, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "dataRead.pyx":1116 - * for rec from 0 <= rec < n_records by 1: - * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) - * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< - * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - */ - goto __pyx_L6; } + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + } - /* "dataRead.pyx":1118 - * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: - * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< - * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + /* "dataRead.pyx":1171 + * cdef unsigned char temp6[6] + * cdef unsigned char temp5[5] + * if bit_count == 64: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1118, __pyx_L1_error) - __pyx_t_12 = (__pyx_t_11 >= 2); - if (__pyx_t_12) { - } else { - __pyx_t_9 = __pyx_t_12; - goto __pyx_L11_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1118, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_12) { - } else { - __pyx_t_9 = __pyx_t_12; - goto __pyx_L11_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1118, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1118, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = __pyx_t_12; - __pyx_L11_bool_binop_done:; - if (__pyx_t_9) { + } - /* "dataRead.pyx":1119 - * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: - * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1179 + * else: + * return buf.byteswap() + * elif n_bytes == 8: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1119, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1119, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1119, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1119, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1119, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1119, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1119, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1119, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_6 = (__pyx_v_n_bytes == 8); + if (__pyx_t_6) { - /* "dataRead.pyx":1118 - * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: - * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< - * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + /* "dataRead.pyx":1180 + * return buf.byteswap() + * elif n_bytes == 8: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L6; - } + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1120 - * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< - * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') - * elif len(raw) > 0: + /* "dataRead.pyx":1181 + * elif n_bytes == 8: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift */ - __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1120, __pyx_L1_error) - __pyx_t_12 = (__pyx_t_11 >= 2); - if (__pyx_t_12) { - } else { - __pyx_t_9 = __pyx_t_12; - goto __pyx_L14_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1120, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1120, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_12) { - } else { - __pyx_t_9 = __pyx_t_12; - goto __pyx_L14_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1120, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1120, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_9 = __pyx_t_12; - __pyx_L14_bool_binop_done:; - if (__pyx_t_9) { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1121 - * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: - * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif len(raw) > 0: - * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1182 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1121, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1121, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1121, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1121, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1120 - * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< - * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') - * elif len(raw) > 0: + /* "dataRead.pyx":1184 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - goto __pyx_L6; - } + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1122 - * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: - * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') - * elif len(raw) > 0: # <<<<<<<<<<<<<< - * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') - * else: + /* "dataRead.pyx":1185 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 64: */ - __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1122, __pyx_L1_error) - __pyx_t_9 = (__pyx_t_11 > 0); - if (__pyx_t_9) { + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1123 - * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') - * elif len(raw) > 0: - * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * else: - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + /* "dataRead.pyx":1184 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1123, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1123, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1123, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1123, __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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1123, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(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_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1123, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1123, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "dataRead.pyx":1122 - * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: - * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') - * elif len(raw) > 0: # <<<<<<<<<<<<<< - * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') - * else: - */ - } - __pyx_L6:; - } - /* "dataRead.pyx":1112 - * cdef unsigned long rec = 0 - * cdef bytes raw - * if channel_format == 'bom': # <<<<<<<<<<<<<< - * # signal_data_type 17: detect BOM per value - * for rec from 0 <= rec < n_records by 1: + /* "dataRead.pyx":1187 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - goto __pyx_L3; - } + __pyx_t_6 = (__pyx_v_bit_count < 64); + if (__pyx_t_6) { - /* "dataRead.pyx":1125 - * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') - * else: - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< - * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') - * return output + /* "dataRead.pyx":1188 + * # mask left part + * if bit_count < 64: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - /*else*/ { - __pyx_t_10 = __pyx_v_n_records; - for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_10; __pyx_v_rec+=1) { + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1126 - * else: - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') # <<<<<<<<<<<<<< - * return output - * + /* "dataRead.pyx":1187 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1126, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1126, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_channel_format}; - __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1126, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1126, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1126, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1126, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - } - __pyx_L3:; - /* "dataRead.pyx":1127 - * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain - * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') - * return output # <<<<<<<<<<<<<< - * - * + /* "dataRead.pyx":1189 + * if bit_count < 64: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_output); - __pyx_r = ((PyObject *)__pyx_v_output); - goto __pyx_L0; + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1107 - * return output - * - * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records, channel_format): - * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) + /* "dataRead.pyx":1190 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* 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_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("dataRead.equalize_string_length", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_output); - __Pyx_XDECREF(__pyx_v_raw); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":1130 - * - * - * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< - * object offsets_array, object sizes_array, - * unsigned long long n_records): + /* "dataRead.pyx":1191 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); -/* Python wrapper */ -static PyObject *__pyx_pw_8dataRead_7vd_data_read(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -PyDoc_STRVAR(__pyx_doc_8dataRead_6vd_data_read, "Read VLSC channel data from raw VD block bytes.\n\n Parameters\n ----------------\n signal_data_type : int\n signal data type (6=ISO-8859-1, 7=UTF-8, 8=UTF-16-LE, 9=UTF-16-BE,\n 17=BOM, 10+=byte array)\n vd_block : bytes\n raw VD block data (no per-value length prefix, unlike SD blocks)\n offsets_array : numpy uint64 array\n byte offset of each value within vd_block\n sizes_array : numpy uint64 array\n byte size of each value\n n_records : int\n number of records\n\n Returns\n -------\n numpy array of decoded strings (dtype U...) or byte arrays (dtype V...)\n "); -static PyMethodDef __pyx_mdef_8dataRead_7vd_data_read = {"vd_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_7vd_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_6vd_data_read}; -static PyObject *__pyx_pw_8dataRead_7vd_data_read(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - unsigned short __pyx_v_signal_data_type; - PyObject *__pyx_v_vd_block = 0; - PyObject *__pyx_v_offsets_array = 0; - PyObject *__pyx_v_sizes_array = 0; - unsigned PY_LONG_LONG __pyx_v_n_records; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[5] = {0,0,0,0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("vd_data_read (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signal_data_type,&__pyx_n_s_vd_block,&__pyx_n_s_offsets_array,&__pyx_n_s_sizes_array,&__pyx_n_s_n_records,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_vd_block)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 1); __PYX_ERR(0, 1130, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_offsets_array)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 2); __PYX_ERR(0, 1130, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sizes_array)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 3); __PYX_ERR(0, 1130, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_records)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 4); __PYX_ERR(0, 1130, __pyx_L3_error) + /* "dataRead.pyx":1190 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ } + + /* "dataRead.pyx":1192 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - if (unlikely(kw_args > 0)) { - const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "vd_data_read") < 0)) __PYX_ERR(0, 1130, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 5)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); - values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); - } - __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1130, __pyx_L3_error) - __pyx_v_vd_block = ((PyObject*)values[1]); - __pyx_v_offsets_array = values[2]; - __pyx_v_sizes_array = values[3]; - __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1132, __pyx_L3_error) - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1130, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("dataRead.vd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vd_block), (&PyBytes_Type), 1, "vd_block", 1))) __PYX_ERR(0, 1130, __pyx_L1_error) - __pyx_r = __pyx_pf_8dataRead_6vd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_vd_block, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_n_records); - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + /* "dataRead.pyx":1180 + * return buf.byteswap() + * elif n_bytes == 8: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + goto __pyx_L7; } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_8dataRead_6vd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_vd_block, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned PY_LONG_LONG __pyx_v_n_records) { - char const *__pyx_v_bit_stream; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned PY_LONG_LONG __pyx_v_size; - unsigned long __pyx_v_max_len; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - char *__pyx_t_1; - unsigned PY_LONG_LONG __pyx_t_2; - unsigned PY_LONG_LONG __pyx_t_3; - unsigned PY_LONG_LONG __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - unsigned PY_LONG_LONG __pyx_t_6; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("vd_data_read", 1); - /* "dataRead.pyx":1153 - * numpy array of decoded strings (dtype U...) or byte arrays (dtype V...) - * """ - * cdef const char* bit_stream = PyBytes_AsString(vd_block) # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned long long offset, size + /* "dataRead.pyx":1194 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_vd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1153, __pyx_L1_error) - __pyx_v_bit_stream = __pyx_t_1; + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1156 - * cdef unsigned long long i - * cdef unsigned long long offset, size - * cdef unsigned long max_len = 0 # <<<<<<<<<<<<<< - * - * # Find max_len from sizes + /* "dataRead.pyx":1195 + * else: + * for i in range(number_of_records): + * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * temp8[2]<<40 | temp8[3]<<32 | \ */ - __pyx_v_max_len = 0; + (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1159 - * - * # Find max_len from sizes - * for i in range(n_records): # <<<<<<<<<<<<<< - * size = sizes_array[i] - * if size > max_len: + /* "dataRead.pyx":1198 + * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ + * temp8[2]<<40 | temp8[3]<<32 | \ + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_2 = __pyx_v_n_records; - __pyx_t_3 = __pyx_t_2; - for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { - __pyx_v_i = __pyx_t_4; + __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); - /* "dataRead.pyx":1160 - * # Find max_len from sizes - * for i in range(n_records): - * size = sizes_array[i] # <<<<<<<<<<<<<< - * if size > max_len: - * max_len = size + /* "dataRead.pyx":1200 + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1160, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_5); if (unlikely((__pyx_t_6 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1160, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_size = ((unsigned PY_LONG_LONG)__pyx_t_6); + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1161 - * for i in range(n_records): - * size = sizes_array[i] - * if size > max_len: # <<<<<<<<<<<<<< - * max_len = size - * + /* "dataRead.pyx":1201 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 64: */ - __pyx_t_7 = (__pyx_v_size > __pyx_v_max_len); - if (__pyx_t_7) { + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1162 - * size = sizes_array[i] - * if size > max_len: - * max_len = size # <<<<<<<<<<<<<< - * - * if max_len == 0: + /* "dataRead.pyx":1200 + * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_v_max_len = ((unsigned long)__pyx_v_size); + } - /* "dataRead.pyx":1161 - * for i in range(n_records): - * size = sizes_array[i] - * if size > max_len: # <<<<<<<<<<<<<< - * max_len = size - * + /* "dataRead.pyx":1203 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - } - } + __pyx_t_6 = (__pyx_v_bit_count < 64); + if (__pyx_t_6) { - /* "dataRead.pyx":1164 - * max_len = size - * - * if max_len == 0: # <<<<<<<<<<<<<< - * return None - * + /* "dataRead.pyx":1204 + * # mask left part + * if bit_count < 64: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - __pyx_t_7 = (__pyx_v_max_len == 0); - if (__pyx_t_7) { + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1165 - * - * if max_len == 0: - * return None # <<<<<<<<<<<<<< - * - * if signal_data_type < 10 or signal_data_type == 17: + /* "dataRead.pyx":1203 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 64: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; + } - /* "dataRead.pyx":1164 - * max_len = size - * - * if max_len == 0: # <<<<<<<<<<<<<< - * return None - * + /* "dataRead.pyx":1205 + * if bit_count < 64: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend */ - } + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1167 - * return None - * - * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< - * return vd_equalize_string(bit_stream, offsets_array, sizes_array, - * max_len, n_records, signal_data_type) + /* "dataRead.pyx":1206 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __pyx_t_8 = (__pyx_v_signal_data_type < 10); - if (!__pyx_t_8) { - } else { - __pyx_t_7 = __pyx_t_8; - goto __pyx_L8_bool_binop_done; - } - __pyx_t_8 = (__pyx_v_signal_data_type == 17); - __pyx_t_7 = __pyx_t_8; - __pyx_L8_bool_binop_done:; - if (__pyx_t_7) { + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1168 - * - * if signal_data_type < 10 or signal_data_type == 17: - * return vd_equalize_string(bit_stream, offsets_array, sizes_array, # <<<<<<<<<<<<<< - * max_len, n_records, signal_data_type) - * else: + /* "dataRead.pyx":1207 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 7: */ - __Pyx_XDECREF(__pyx_r); + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1169 - * if signal_data_type < 10 or signal_data_type == 17: - * return vd_equalize_string(bit_stream, offsets_array, sizes_array, - * max_len, n_records, signal_data_type) # <<<<<<<<<<<<<< - * else: - * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, + /* "dataRead.pyx":1206 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_string(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records, __pyx_v_signal_data_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; + } - /* "dataRead.pyx":1167 - * return None - * - * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< - * return vd_equalize_string(bit_stream, offsets_array, sizes_array, - * max_len, n_records, signal_data_type) + /* "dataRead.pyx":1208 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 7: + * if swap == 0: + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } + } + __pyx_L7:; + + /* "dataRead.pyx":1179 + * else: + * return buf.byteswap() + * elif n_bytes == 8: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ + goto __pyx_L3; } - /* "dataRead.pyx":1171 - * max_len, n_records, signal_data_type) - * else: - * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, # <<<<<<<<<<<<<< - * max_len, n_records) - * + /* "dataRead.pyx":1209 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 7: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); + __pyx_t_6 = (__pyx_v_n_bytes == 7); + if (__pyx_t_6) { - /* "dataRead.pyx":1172 - * else: - * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, - * max_len, n_records) # <<<<<<<<<<<<<< - * - * + /* "dataRead.pyx":1210 + * buf[i] = temp8byte + * elif n_bytes == 7: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_bytes(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - } + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1130 - * - * - * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< - * object offsets_array, object sizes_array, - * unsigned long long n_records): + /* "dataRead.pyx":1211 + * elif n_bytes == 7: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift */ + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("dataRead.vd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} + /* "dataRead.pyx":1212 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); -/* "dataRead.pyx":1175 - * - * - * cdef inline vd_equalize_string(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records, - * unsigned short signal_data_type): + /* "dataRead.pyx":1214 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const *__pyx_v_bit_stream, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records, unsigned short __pyx_v_signal_data_type) { - PyArrayObject *__pyx_v_output = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned PY_LONG_LONG __pyx_v_offset; - unsigned long __pyx_v_size; - PyObject *__pyx_v_raw = 0; - 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; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - unsigned int __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - unsigned PY_LONG_LONG __pyx_t_11; - unsigned long __pyx_t_12; - int __pyx_t_13; - unsigned PY_LONG_LONG __pyx_t_14; - int __pyx_t_15; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("vd_equalize_string", 1); + /* "dataRead.pyx":1215 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 56: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1179 - * unsigned short signal_data_type): - * """Decode string values from VD block using offset/size pairs.""" - * cdef np.ndarray output = np.zeros((n_records,), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned long long offset + /* "dataRead.pyx":1214 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1179, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1179, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1179, __pyx_L1_error) - __pyx_v_output = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; + } - /* "dataRead.pyx":1184 - * cdef unsigned long size - * cdef bytes raw - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * for i in range(n_records): - * size = sizes_array[i] + /* "dataRead.pyx":1217 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - switch (__pyx_v_signal_data_type) { - case 6: + __pyx_t_6 = (__pyx_v_bit_count < 56); + if (__pyx_t_6) { - /* "dataRead.pyx":1185 - * cdef bytes raw - * if signal_data_type == 6: - * for i in range(n_records): # <<<<<<<<<<<<<< - * size = sizes_array[i] - * if size > 0: + /* "dataRead.pyx":1218 + * # mask left part + * if bit_count < 56: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - __pyx_t_9 = __pyx_v_n_records; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1186 - * if signal_data_type == 6: - * for i in range(n_records): - * size = sizes_array[i] # <<<<<<<<<<<<<< - * if size > 0: - * offset = offsets_array[i] + /* "dataRead.pyx":1217 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1186, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1186, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_size = ((unsigned long)__pyx_t_12); + } - /* "dataRead.pyx":1187 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1219 + * if bit_count < 56: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend */ - __pyx_t_13 = (__pyx_v_size > 0); - if (__pyx_t_13) { + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1188 - * size = sizes_array[i] - * if size > 0: - * offset = offsets_array[i] # <<<<<<<<<<<<<< - * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') - * elif signal_data_type == 7: + /* "dataRead.pyx":1220 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1188, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1188, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1189 - * if size > 0: - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif signal_data_type == 7: - * for i in range(n_records): + /* "dataRead.pyx":1221 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":1220 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1189, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__17, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1189, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1187 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1222 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } + + /* "dataRead.pyx":1210 + * buf[i] = temp8byte + * elif n_bytes == 7: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + goto __pyx_L18; } - /* "dataRead.pyx":1184 - * cdef unsigned long size - * cdef bytes raw - * if signal_data_type == 6: # <<<<<<<<<<<<<< - * for i in range(n_records): - * size = sizes_array[i] + /* "dataRead.pyx":1224 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ */ - break; - case 7: + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1191 - * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') - * elif signal_data_type == 7: - * for i in range(n_records): # <<<<<<<<<<<<<< - * size = sizes_array[i] - * if size > 0: + /* "dataRead.pyx":1225 + * else: + * for i in range(number_of_records): + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes */ - __pyx_t_9 = __pyx_v_n_records; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1192 - * elif signal_data_type == 7: - * for i in range(n_records): - * size = sizes_array[i] # <<<<<<<<<<<<<< - * if size > 0: - * offset = offsets_array[i] + /* "dataRead.pyx":1227 + * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1192, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1192, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_size = ((unsigned long)__pyx_t_12); + __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); - /* "dataRead.pyx":1193 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1229 + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_13 = (__pyx_v_size > 0); - if (__pyx_t_13) { + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1194 - * size = sizes_array[i] - * if size > 0: - * offset = offsets_array[i] # <<<<<<<<<<<<<< - * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') - * elif signal_data_type == 8: + /* "dataRead.pyx":1230 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 56: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1194, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1194, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1195 - * if size > 0: - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif signal_data_type == 8: - * for i in range(n_records): + /* "dataRead.pyx":1229 + * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1195, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1195, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1195, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1195, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__14, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1195, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1195, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1195, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1195, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1193 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1232 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - } - } + __pyx_t_6 = (__pyx_v_bit_count < 56); + if (__pyx_t_6) { - /* "dataRead.pyx":1190 - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') - * elif signal_data_type == 7: # <<<<<<<<<<<<<< - * for i in range(n_records): - * size = sizes_array[i] + /* "dataRead.pyx":1233 + * # mask left part + * if bit_count < 56: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - break; - case 8: + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1197 - * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') - * elif signal_data_type == 8: - * for i in range(n_records): # <<<<<<<<<<<<<< - * size = sizes_array[i] - * if size > 0: + /* "dataRead.pyx":1232 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 56: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_9 = __pyx_v_n_records; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + } - /* "dataRead.pyx":1198 - * elif signal_data_type == 8: - * for i in range(n_records): - * size = sizes_array[i] # <<<<<<<<<<<<<< - * if size > 0: - * offset = offsets_array[i] + /* "dataRead.pyx":1234 + * if bit_count < 56: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1198, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1198, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_size = ((unsigned long)__pyx_t_12); + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1199 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1235 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __pyx_t_13 = (__pyx_v_size > 0); - if (__pyx_t_13) { + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1200 - * size = sizes_array[i] - * if size > 0: - * offset = offsets_array[i] # <<<<<<<<<<<<<< - * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif signal_data_type == 9: + /* "dataRead.pyx":1236 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 6: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1200, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1200, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1201 - * if size > 0: - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif signal_data_type == 9: - * for i in range(n_records): + /* "dataRead.pyx":1235 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1201, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__15, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1201, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1199 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1237 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 6: + * if swap == 0: */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } } + __pyx_L18:; - /* "dataRead.pyx":1196 - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') - * elif signal_data_type == 8: # <<<<<<<<<<<<<< - * for i in range(n_records): - * size = sizes_array[i] + /* "dataRead.pyx":1209 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 7: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - break; - case 9: + goto __pyx_L3; + } - /* "dataRead.pyx":1203 - * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif signal_data_type == 9: - * for i in range(n_records): # <<<<<<<<<<<<<< - * size = sizes_array[i] - * if size > 0: + /* "dataRead.pyx":1238 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 6: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __pyx_t_9 = __pyx_v_n_records; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_6 = (__pyx_v_n_bytes == 6); + if (__pyx_t_6) { - /* "dataRead.pyx":1204 - * elif signal_data_type == 9: - * for i in range(n_records): - * size = sizes_array[i] # <<<<<<<<<<<<<< - * if size > 0: - * offset = offsets_array[i] + /* "dataRead.pyx":1239 + * buf[i] = temp8byte + * elif n_bytes == 6: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1204, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_size = ((unsigned long)__pyx_t_12); + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1205 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1240 + * elif n_bytes == 6: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift */ - __pyx_t_13 = (__pyx_v_size > 0); - if (__pyx_t_13) { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1206 - * size = sizes_array[i] - * if size > 0: - * offset = offsets_array[i] # <<<<<<<<<<<<<< - * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') - * elif signal_data_type == 17: + /* "dataRead.pyx":1241 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1206, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1206, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1207 - * if size > 0: - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif signal_data_type == 17: - * # BOM-per-value: detect encoding from BOM bytes + /* "dataRead.pyx":1243 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1207, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__16, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1207, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1207, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1205 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1244 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 48: */ - } - } + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1202 - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif signal_data_type == 9: # <<<<<<<<<<<<<< - * for i in range(n_records): - * size = sizes_array[i] + /* "dataRead.pyx":1243 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - break; - case 17: + } - /* "dataRead.pyx":1210 - * elif signal_data_type == 17: - * # BOM-per-value: detect encoding from BOM bytes - * for i in range(n_records): # <<<<<<<<<<<<<< - * size = sizes_array[i] - * if size > 0: + /* "dataRead.pyx":1246 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_9 = __pyx_v_n_records; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_6 = (__pyx_v_bit_count < 48); + if (__pyx_t_6) { - /* "dataRead.pyx":1211 - * # BOM-per-value: detect encoding from BOM bytes - * for i in range(n_records): - * size = sizes_array[i] # <<<<<<<<<<<<<< - * if size > 0: - * offset = offsets_array[i] + /* "dataRead.pyx":1247 + * # mask left part + * if bit_count < 48: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1211, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_size = ((unsigned long)__pyx_t_12); + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1212 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * raw = bytes(bit_stream[offset:offset+size]) + /* "dataRead.pyx":1246 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - __pyx_t_13 = (__pyx_v_size > 0); - if (__pyx_t_13) { + } - /* "dataRead.pyx":1213 - * size = sizes_array[i] - * if size > 0: - * offset = offsets_array[i] # <<<<<<<<<<<<<< - * raw = bytes(bit_stream[offset:offset+size]) - * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + /* "dataRead.pyx":1248 + * if bit_count < 48: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1213, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1213, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1214 - * if size > 0: - * offset = offsets_array[i] - * raw = bytes(bit_stream[offset:offset+size]) # <<<<<<<<<<<<<< - * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: - * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1249 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1214, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF_SET(__pyx_v_raw, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1215 - * offset = offsets_array[i] - * raw = bytes(bit_stream[offset:offset+size]) - * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< - * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + /* "dataRead.pyx":1250 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":1249 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ - __pyx_t_15 = (__pyx_v_size >= 3); - if (__pyx_t_15) { - } else { - __pyx_t_13 = __pyx_t_15; - goto __pyx_L19_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1215, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_15) { - } else { - __pyx_t_13 = __pyx_t_15; - goto __pyx_L19_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1215, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_15) { - } else { - __pyx_t_13 = __pyx_t_15; - goto __pyx_L19_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1215, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1215, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_13 = __pyx_t_15; - __pyx_L19_bool_binop_done:; - if (__pyx_t_13) { - /* "dataRead.pyx":1216 - * raw = bytes(bit_stream[offset:offset+size]) - * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: - * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1251 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1216, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1216, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1216, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1216, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1216, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1216, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } - /* "dataRead.pyx":1215 - * offset = offsets_array[i] - * raw = bytes(bit_stream[offset:offset+size]) - * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< - * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + /* "dataRead.pyx":1239 + * buf[i] = temp8byte + * elif n_bytes == 6: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - goto __pyx_L18; - } + goto __pyx_L29; + } - /* "dataRead.pyx":1217 - * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: - * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< - * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + /* "dataRead.pyx":1253 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ */ - __pyx_t_15 = (__pyx_v_size >= 2); - if (__pyx_t_15) { - } else { - __pyx_t_13 = __pyx_t_15; - goto __pyx_L23_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1217, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_15) { - } else { - __pyx_t_13 = __pyx_t_15; - goto __pyx_L23_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1217, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1217, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_13 = __pyx_t_15; - __pyx_L23_bool_binop_done:; - if (__pyx_t_13) { + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1218 - * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: - * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1254 + * else: + * for i in range(number_of_records): + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1218, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1218, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1218, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1217 - * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: - * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< - * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + /* "dataRead.pyx":1256 + * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - goto __pyx_L18; - } + __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); - /* "dataRead.pyx":1219 - * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< - * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') - * else: + /* "dataRead.pyx":1258 + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_15 = (__pyx_v_size >= 2); - if (__pyx_t_15) { - } else { - __pyx_t_13 = __pyx_t_15; - goto __pyx_L26_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1219, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_15) { - } else { - __pyx_t_13 = __pyx_t_15; - goto __pyx_L26_bool_binop_done; - } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1219, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1219, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_13 = __pyx_t_15; - __pyx_L26_bool_binop_done:; - if (__pyx_t_13) { + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1220 - * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: - * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * else: - * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') + /* "dataRead.pyx":1259 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 48: */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1220, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1220, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1220, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1220, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1219 - * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: - * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') - * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< - * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') - * else: + /* "dataRead.pyx":1258 + * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - goto __pyx_L18; } - /* "dataRead.pyx":1222 - * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') - * else: - * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< - * return output - * + /* "dataRead.pyx":1261 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1222, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1222, __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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(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_8 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1222, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1222, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_L18:; + __pyx_t_6 = (__pyx_v_bit_count < 48); + if (__pyx_t_6) { - /* "dataRead.pyx":1212 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * raw = bytes(bit_stream[offset:offset+size]) + /* "dataRead.pyx":1262 + * # mask left part + * if bit_count < 48: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend */ - } - } + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1208 - * offset = offsets_array[i] - * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') - * elif signal_data_type == 17: # <<<<<<<<<<<<<< - * # BOM-per-value: detect encoding from BOM bytes - * for i in range(n_records): + /* "dataRead.pyx":1261 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 48: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ - break; - default: break; - } + } - /* "dataRead.pyx":1223 - * else: - * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') - * return output # <<<<<<<<<<<<<< - * - * + /* "dataRead.pyx":1263 + * if bit_count < 48: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_output); - __pyx_r = ((PyObject *)__pyx_v_output); - goto __pyx_L0; + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1175 - * - * - * cdef inline vd_equalize_string(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records, - * unsigned short signal_data_type): + /* "dataRead.pyx":1264 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { - /* 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_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("dataRead.vd_equalize_string", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_output); - __Pyx_XDECREF(__pyx_v_raw); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "dataRead.pyx":1226 - * - * - * cdef inline vd_equalize_bytes(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records): - * """Return byte-array values from VD block using offset/size pairs.""" + /* "dataRead.pyx":1265 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * elif n_bytes == 5: */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); -static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *__pyx_v_bit_stream, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records) { - PyArrayObject *__pyx_v_output = 0; - unsigned PY_LONG_LONG __pyx_v_i; - unsigned PY_LONG_LONG __pyx_v_offset; - unsigned long __pyx_v_size; - 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; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - unsigned int __pyx_t_8; - unsigned PY_LONG_LONG __pyx_t_9; - unsigned PY_LONG_LONG __pyx_t_10; - unsigned PY_LONG_LONG __pyx_t_11; - unsigned long __pyx_t_12; - int __pyx_t_13; - unsigned PY_LONG_LONG __pyx_t_14; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("vd_equalize_bytes", 1); + /* "dataRead.pyx":1264 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + } - /* "dataRead.pyx":1229 - * unsigned long max_len, unsigned long long n_records): - * """Return byte-array values from VD block using offset/size pairs.""" - * cdef np.ndarray output = np.zeros((n_records,), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< - * cdef unsigned long long i - * cdef unsigned long long offset + /* "dataRead.pyx":1266 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * elif n_bytes == 5: + * if swap == 0: */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error); - __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error); - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } } + __pyx_L29:; + + /* "dataRead.pyx":1238 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 6: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): + */ + goto __pyx_L3; } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1229, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1229, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1229, __pyx_L1_error) - __pyx_v_output = ((PyArrayObject *)__pyx_t_4); - __pyx_t_4 = 0; - /* "dataRead.pyx":1233 - * cdef unsigned long long offset - * cdef unsigned long size - * for i in range(n_records): # <<<<<<<<<<<<<< - * size = sizes_array[i] - * if size > 0: + /* "dataRead.pyx":1267 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 5: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): */ - __pyx_t_9 = __pyx_v_n_records; - __pyx_t_10 = __pyx_t_9; - for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { - __pyx_v_i = __pyx_t_11; + __pyx_t_6 = (__pyx_v_n_bytes == 5); + if (__pyx_t_6) { - /* "dataRead.pyx":1234 - * cdef unsigned long size - * for i in range(n_records): - * size = sizes_array[i] # <<<<<<<<<<<<<< - * if size > 0: - * offset = offsets_array[i] + /* "dataRead.pyx":1268 + * buf[i] = temp8byte + * elif n_bytes == 5: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1234, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1234, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_size = ((unsigned long)__pyx_t_12); + __pyx_t_6 = (__pyx_v_swap == 0); + if (__pyx_t_6) { - /* "dataRead.pyx":1235 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + /* "dataRead.pyx":1269 + * elif n_bytes == 5: + * if swap == 0: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift */ - __pyx_t_13 = (__pyx_v_size > 0); - if (__pyx_t_13) { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1236 - * size = sizes_array[i] - * if size > 0: - * offset = offsets_array[i] # <<<<<<<<<<<<<< - * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') - * return output + /* "dataRead.pyx":1270 + * if swap == 0: + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1236, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1236, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1237 - * if size > 0: - * offset = offsets_array[i] - * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< - * return output + /* "dataRead.pyx":1272 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":1273 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 40: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":1272 + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = NULL; - __pyx_t_8 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_8 = 1; } + + /* "dataRead.pyx":1275 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 40: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + */ + __pyx_t_6 = (__pyx_v_bit_count < 40); + if (__pyx_t_6) { + + /* "dataRead.pyx":1276 + * # mask left part + * if bit_count < 40: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + + /* "dataRead.pyx":1275 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 40: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + */ + } + + /* "dataRead.pyx":1277 + * if bit_count < 40: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":1278 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":1279 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * else: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":1278 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":1280 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * else: + * for i in range(number_of_records): + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - #endif - { - PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_kp_b__13}; - __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1237, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1235 - * for i in range(n_records): - * size = sizes_array[i] - * if size > 0: # <<<<<<<<<<<<<< - * offset = offsets_array[i] - * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + /* "dataRead.pyx":1268 + * buf[i] = temp8byte + * elif n_bytes == 5: + * if swap == 0: # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + */ + goto __pyx_L40; + } + + /* "dataRead.pyx":1282 + * buf[i] = temp8byte + * else: + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + */ + /*else*/ { + __pyx_t_7 = __pyx_v_number_of_records; + __pyx_t_8 = __pyx_t_7; + for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { + __pyx_v_i = __pyx_t_9; + + /* "dataRead.pyx":1283 + * else: + * for i in range(number_of_records): + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + */ + (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); + + /* "dataRead.pyx":1285 + * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) + * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< + * # right shift + * if bit_offset > 0: + */ + __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); + + /* "dataRead.pyx":1287 + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + __pyx_t_6 = (__pyx_v_bit_offset > 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":1288 + * # right shift + * if bit_offset > 0: + * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< + * # mask left part + * if bit_count < 40: + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); + + /* "dataRead.pyx":1287 + * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes + * # right shift + * if bit_offset > 0: # <<<<<<<<<<<<<< + * temp8byte = temp8byte >> bit_offset + * # mask left part + */ + } + + /* "dataRead.pyx":1290 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 40: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + */ + __pyx_t_6 = (__pyx_v_bit_count < 40); + if (__pyx_t_6) { + + /* "dataRead.pyx":1291 + * # mask left part + * if bit_count < 40: + * temp8byte &= mask # <<<<<<<<<<<<<< + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); + + /* "dataRead.pyx":1290 + * temp8byte = temp8byte >> bit_offset + * # mask left part + * if bit_count < 40: # <<<<<<<<<<<<<< + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask */ + } + + /* "dataRead.pyx":1292 + * if bit_count < 40: + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + */ + __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); + + /* "dataRead.pyx":1293 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + __pyx_t_6 = (__pyx_v_sign_bit != 0); + if (__pyx_t_6) { + + /* "dataRead.pyx":1294 + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend # <<<<<<<<<<<<<< + * buf[i] = temp8byte + * return buf + */ + __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); + + /* "dataRead.pyx":1293 + * temp8byte &= mask + * sign_bit = temp8byte & sign_bit_mask + * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< + * temp8byte |= sign_extend + * buf[i] = temp8byte + */ + } + + /* "dataRead.pyx":1295 + * if sign_bit: # negative value, sign extend + * temp8byte |= sign_extend + * buf[i] = temp8byte # <<<<<<<<<<<<<< + * return buf + * + */ + __pyx_t_10 = __pyx_v_i; + *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; + } } + __pyx_L40:; + + /* "dataRead.pyx":1267 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * elif n_bytes == 5: # <<<<<<<<<<<<<< + * if swap == 0: + * for i in range(number_of_records): + */ } + __pyx_L3:; - /* "dataRead.pyx":1238 - * offset = offsets_array[i] - * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') - * return output # <<<<<<<<<<<<<< + /* "dataRead.pyx":1296 + * temp8byte |= sign_extend + * buf[i] = temp8byte + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF((PyObject *)__pyx_v_output); - __pyx_r = ((PyObject *)__pyx_v_output); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":1226 - * + /* "dataRead.pyx":1157 + * return buf * - * cdef inline vd_equalize_bytes(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< - * unsigned long max_len, unsigned long long n_records): - * """Return byte-array values from VD block using offset/size pairs.""" + * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, + * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): */ /* function exit code */ @@ -37971,570 +37219,6287 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *_ __Pyx_XDECREF(__pyx_t_2); __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_AddTraceback("dataRead.vd_equalize_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename); + { PyObject *__pyx_type, *__pyx_value, *__pyx_tb; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);} + __Pyx_AddTraceback("dataRead.read_signed_longlong", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; + goto __pyx_L2; __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_SafeReleaseBuffer(&__pyx_pybuffernd_buf.rcbuffer->pybuffer); + __pyx_L2:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "(tree fragment)":1 - * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result +/* "dataRead.pyx":1298 + * return buf + * + * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset): */ -/* Python wrapper */ -static PyObject *__pyx_pw_8dataRead_9__pyx_unpickle_SymBufReader(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -); /*proto*/ -static PyMethodDef __pyx_mdef_8dataRead_9__pyx_unpickle_SymBufReader = {"__pyx_unpickle_SymBufReader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_9__pyx_unpickle_SymBufReader, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_8dataRead_9__pyx_unpickle_SymBufReader(PyObject *__pyx_self, -#if CYTHON_METH_FASTCALL -PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds -#else -PyObject *__pyx_args, PyObject *__pyx_kwds -#endif -) { - PyObject *__pyx_v___pyx_type = 0; - long __pyx_v___pyx_checksum; - PyObject *__pyx_v___pyx_state = 0; - #if !CYTHON_METH_FASTCALL - CYTHON_UNUSED Py_ssize_t __pyx_nargs; - #endif - CYTHON_UNUSED PyObject *const *__pyx_kwvalues; - PyObject* values[3] = {0,0,0}; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader (wrapper)", 0); - #if !CYTHON_METH_FASTCALL - #if CYTHON_ASSUME_SAFE_MACROS - __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); - #else - __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; - #endif - #endif - __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); - { - PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - if (__pyx_kwds) { - Py_ssize_t kw_args; - switch (__pyx_nargs) { - case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); - switch (__pyx_nargs) { - case 0: - if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { - (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); - kw_args--; - } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_SymBufReader") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) - } - } else if (unlikely(__pyx_nargs != 3)) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); - values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); - values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); - } - __pyx_v___pyx_type = values[0]; - __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_v___pyx_state = values[2]; - } - goto __pyx_L6_skip; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_L6_skip:; - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_AddTraceback("dataRead.__pyx_unpickle_SymBufReader", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_8dataRead_8__pyx_unpickle_SymBufReader(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); - - /* function exit code */ - { - Py_ssize_t __pyx_temp; - for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { - __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); - } - } - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_8dataRead_8__pyx_unpickle_SymBufReader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_v___pyx_PickleError = 0; - PyObject *__pyx_v___pyx_result = 0; +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, CYTHON_UNUSED unsigned long __pyx_v_bit_count, CYTHON_UNUSED unsigned char __pyx_v_bit_offset) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned long __pyx_v_pos_byte_end; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; + PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; PyObject *__pyx_t_4 = NULL; - unsigned int __pyx_t_5; + unsigned PY_LONG_LONG __pyx_t_5; + unsigned PY_LONG_LONG __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader", 1); + __Pyx_RefNannySetupContext("read_byte", 1); - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + /* "dataRead.pyx":1301 + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset): + * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__18, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1301, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1301, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1301, __pyx_L1_error) + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum - * __pyx_result = SymBufReader.__new__(__pyx_type) + /* "dataRead.pyx":1303 + * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_PickleError); - __Pyx_GIVEREF(__pyx_n_s_PickleError); - if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); - __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_t_1); - __pyx_v___pyx_PickleError = __pyx_t_1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); - /* "(tree fragment)":6 - * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum # <<<<<<<<<<<<<< - * __pyx_result = SymBufReader.__new__(__pyx_type) - * if __pyx_state is not None: + /* "dataRead.pyx":1304 + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i]) */ - __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __pyx_t_5 = __pyx_v_number_of_records; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "dataRead.pyx":1305 + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): + * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< + * pos_byte_end + record_byte_size * i]) + * return buf + */ + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1305, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1305, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_1, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1305, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(1, 6, __pyx_L1_error) + } - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum - */ - } - - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum - * __pyx_result = SymBufReader.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_8dataRead_SymBufReader), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - __pyx_t_5 = 0; - #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_5 = 1; - } - } - #endif - { - PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; - __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - __pyx_v___pyx_result = __pyx_t_1; - __pyx_t_1 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum - * __pyx_result = SymBufReader.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - __pyx_t_2 = (__pyx_v___pyx_state != Py_None); - if (__pyx_t_2) { - - /* "(tree fragment)":9 - * __pyx_result = SymBufReader.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_1 = __pyx_f_8dataRead___pyx_unpickle_SymBufReader__set_state(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum - * __pyx_result = SymBufReader.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): - * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + /* "dataRead.pyx":1307 + * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i]) + * return buf # <<<<<<<<<<<<<< + * + * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, */ __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v___pyx_result); - __pyx_r = __pyx_v___pyx_result; + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "(tree fragment)":1 - * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result + /* "dataRead.pyx":1298 + * return buf + * + * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset): */ /* 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_AddTraceback("dataRead.__pyx_unpickle_SymBufReader", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; + __Pyx_AddTraceback("dataRead.read_byte", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; __pyx_L0:; - __Pyx_XDECREF(__pyx_v___pyx_PickleError); - __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -/* "(tree fragment)":11 - * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] - * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): +/* "dataRead.pyx":1309 + * return buf + * + * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ -static PyObject *__pyx_f_8dataRead___pyx_unpickle_SymBufReader__set_state(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_bit_stream, PyObject *__pyx_v_record_format, unsigned PY_LONG_LONG __pyx_v_number_of_records, unsigned long __pyx_v_record_byte_size, unsigned long __pyx_v_pos_byte_beg, unsigned long __pyx_v_n_bytes, CYTHON_UNUSED unsigned long __pyx_v_bit_count, CYTHON_UNUSED unsigned char __pyx_v_bit_offset, unsigned char __pyx_v_swap) { + PyArrayObject *__pyx_v_buf = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned long __pyx_v_pos_byte_end; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations - unsigned char __pyx_t_1[0x10000]; - Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - unsigned int __pyx_t_8; + PyObject *__pyx_t_4 = NULL; + unsigned PY_LONG_LONG __pyx_t_5; + unsigned PY_LONG_LONG __pyx_t_6; + unsigned PY_LONG_LONG __pyx_t_7; + int __pyx_t_8; + unsigned int __pyx_t_9; int __pyx_lineno = 0; const char *__pyx_filename = NULL; int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader__set_state", 1); + __Pyx_RefNannySetupContext("read_array", 1); - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): - * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[5]) + /* "dataRead.pyx":1312 + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): + * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - if (unlikely((__Pyx_carray_from_py_unsigned_char(PyTuple_GET_ITEM(__pyx_v___pyx_state, 0), __pyx_t_1, 0x10000) < 0))) __PYX_ERR(1, 12, __pyx_L1_error) - if (unlikely((0x10000) != (0x10000))) { - PyErr_Format(PyExc_ValueError, "Assignment to slice of wrong length, expected %" CYTHON_FORMAT_SSIZE_T "d, got %" CYTHON_FORMAT_SSIZE_T "d", (Py_ssize_t)(0x10000), (Py_ssize_t)(0x10000)); - __PYX_ERR(1, 12, __pyx_L1_error) - } - memcpy(&(__pyx_v___pyx_result->_buf[0]), __pyx_t_1, sizeof(__pyx_v___pyx_result->_buf[0]) * (0x10000)); - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 1)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __pyx_v___pyx_result->_buf_len = __pyx_t_2; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 2)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __pyx_v___pyx_result->_buf_start = __pyx_t_2; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_3 = PyTuple_GET_ITEM(__pyx_v___pyx_state, 3); - __Pyx_INCREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v___pyx_result->_fid); - __Pyx_DECREF(__pyx_v___pyx_result->_fid); - __pyx_v___pyx_result->_fid = __pyx_t_3; - __pyx_t_3 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 4)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __pyx_v___pyx_result->_pos = __pyx_t_2; + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1312, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1312, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1312, __pyx_L1_error) + __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; - /* "(tree fragment)":13 - * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): - * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] - * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[5]) + /* "dataRead.pyx":1314 + * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); + + /* "dataRead.pyx":1315 + * cdef unsigned long long i + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): # <<<<<<<<<<<<<< + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) + */ + __pyx_t_5 = __pyx_v_number_of_records; + __pyx_t_6 = __pyx_t_5; + for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { + __pyx_v_i = __pyx_t_7; + + /* "dataRead.pyx":1316 + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: + */ + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1317 + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< + * if swap == 0: + * return buf + */ + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + + /* "dataRead.pyx":1316 + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: + */ + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(0, 1316, __pyx_L1_error); + __pyx_t_4 = 0; + + /* "dataRead.pyx":1317 + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< + * if swap == 0: + * return buf + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1317, __pyx_L1_error) + + /* "dataRead.pyx":1316 + * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes + * for i in range(number_of_records): + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: + */ + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_2, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1316, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - __pyx_t_2 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_2 > 5); - if (__pyx_t_5) { - } else { - __pyx_t_4 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; + + /* "dataRead.pyx":1318 + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ + __pyx_t_8 = (__pyx_v_swap == 0); + if (__pyx_t_8) { + + /* "dataRead.pyx":1319 + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: + * return buf # <<<<<<<<<<<<<< + * else: + * return buf.byteswap() + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_buf); + __pyx_r = ((PyObject *)__pyx_v_buf); + goto __pyx_L0; + + /* "dataRead.pyx":1318 + * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ + * pos_byte_end + record_byte_size * i], dtype=record_format) + * if swap == 0: # <<<<<<<<<<<<<< + * return buf + * else: + */ } - __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_4 = __pyx_t_5; - __pyx_L4_bool_binop_done:; - if (__pyx_t_4) { - /* "(tree fragment)":14 - * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] - * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[5]) # <<<<<<<<<<<<<< + /* "dataRead.pyx":1321 + * return buf + * else: + * return buf.byteswap() # <<<<<<<<<<<<<< + * + * def unsorted_data_read4(record, info, bytes tmp, */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 14, __pyx_L1_error) - } - __pyx_t_6 = NULL; - __pyx_t_8 = 0; + /*else*/ { + __Pyx_XDECREF(__pyx_r); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1321, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = NULL; + __pyx_t_9 = 0; #if CYTHON_UNPACK_METHODS - if (likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_8 = 1; + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_9 = 1; } } #endif { - PyObject *__pyx_callargs[2] = {__pyx_t_6, PyTuple_GET_ITEM(__pyx_v___pyx_state, 5)}; - __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1321, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): - * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] - * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[5]) - */ + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; } - /* "(tree fragment)":11 - * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] - * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): + /* "dataRead.pyx":1309 + * return buf + * + * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< + * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, + * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): */ /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - 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_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("dataRead.__pyx_unpickle_SymBufReader__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dataRead.read_array", __pyx_clineno, __pyx_lineno, __pyx_filename); __pyx_r = 0; __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_buf); __Pyx_XGIVEREF(__pyx_r); __Pyx_RefNannyFinishContext(); return __pyx_r; } -static struct __pyx_vtabstruct_8dataRead_SymBufReader __pyx_vtable_8dataRead_SymBufReader; -static PyObject *__pyx_tp_new_8dataRead_SymBufReader(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - struct __pyx_obj_8dataRead_SymBufReader *p; - PyObject *o; - #if CYTHON_COMPILING_IN_LIMITED_API - allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); - o = alloc_func(t, 0); - #else - if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - #endif - p = ((struct __pyx_obj_8dataRead_SymBufReader *)o); - p->__pyx_vtab = __pyx_vtabptr_8dataRead_SymBufReader; - p->_fid = Py_None; Py_INCREF(Py_None); - return o; -} +/* "dataRead.pyx":1323 + * return buf.byteswap() + * + * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< + * const unsigned short record_id_size, + * const unsigned long long data_block_length): + */ -static void __pyx_tp_dealloc_8dataRead_SymBufReader(PyObject *o) { - struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; - #if CYTHON_USE_TP_FINALIZE - if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { - if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8dataRead_SymBufReader) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - } +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_5unsorted_data_read4(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8dataRead_4unsorted_data_read4, " reads only the channels using offset functions, channel by channel within unsorted data\n\n Parameters\n ------------\n record : class\n record class\n info: class\n info class\n tmp : bytes\n byte stream\n record_id_size : unsigned short\n record id length\n data_block_length : unsigned long long\n length of data block minus header\n\n Returns\n --------\n buf : array\n data array\n\n "); +static PyMethodDef __pyx_mdef_8dataRead_5unsorted_data_read4 = {"unsorted_data_read4", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_5unsorted_data_read4, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_4unsorted_data_read4}; +static PyObject *__pyx_pw_8dataRead_5unsorted_data_read4(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v_record = 0; + PyObject *__pyx_v_info = 0; + PyObject *__pyx_v_tmp = 0; + unsigned short __pyx_v_record_id_size; + unsigned PY_LONG_LONG __pyx_v_data_block_length; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; #endif - PyObject_GC_UnTrack(o); - Py_CLEAR(p->_fid); - #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY - (*Py_TYPE(o)->tp_free)(o); + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("unsorted_data_read4 (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); #else - { - freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); - if (tp_free) tp_free(o); - } + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; #endif -} - -static int __pyx_tp_traverse_8dataRead_SymBufReader(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; - if (p->_fid) { - e = (*v)(p->_fid, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_8dataRead_SymBufReader(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; - tmp = ((PyObject*)p->_fid); - p->_fid = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyMethodDef __pyx_methods_8dataRead_SymBufReader[] = { - {"seek", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_3seek, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_12SymBufReader_2seek}, - {"tell", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_5tell, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, - {"read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_7read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_12SymBufReader_6read}, - {"fileno", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_9fileno, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, - {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, - {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, - {0, 0, 0, 0} -}; -#if CYTHON_USE_TYPE_SPECS -static PyType_Slot __pyx_type_8dataRead_SymBufReader_slots[] = { - {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8dataRead_SymBufReader}, - {Py_tp_doc, (void *)PyDoc_STR("Bidirectional-buffered wrapper around a Python file object.\n\n Drop-in replacement for any ``fid`` used in mdfreader metadata parsing:\n supports ``seek(pos[, whence])``, ``read([n])``, ``tell()``, ``fileno()``.\n ")}, - {Py_tp_traverse, (void *)__pyx_tp_traverse_8dataRead_SymBufReader}, - {Py_tp_clear, (void *)__pyx_tp_clear_8dataRead_SymBufReader}, - {Py_tp_methods, (void *)__pyx_methods_8dataRead_SymBufReader}, - {Py_tp_init, (void *)__pyx_pw_8dataRead_12SymBufReader_1__init__}, - {Py_tp_new, (void *)__pyx_tp_new_8dataRead_SymBufReader}, - {0, 0}, -}; -static PyType_Spec __pyx_type_8dataRead_SymBufReader_spec = { - "dataRead.SymBufReader", - sizeof(struct __pyx_obj_8dataRead_SymBufReader), - 0, - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_record,&__pyx_n_s_info,&__pyx_n_s_tmp,&__pyx_n_s_record_id_size,&__pyx_n_s_data_block_length,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_info)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 1); __PYX_ERR(0, 1323, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_tmp)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 2); __PYX_ERR(0, 1323, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_record_id_size)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 3); __PYX_ERR(0, 1323, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_data_block_length)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 4); __PYX_ERR(0, 1323, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "unsorted_data_read4") < 0)) __PYX_ERR(0, 1323, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 5)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + } + __pyx_v_record = values[0]; + __pyx_v_info = values[1]; + __pyx_v_tmp = ((PyObject*)values[2]); + __pyx_v_record_id_size = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_record_id_size == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1324, __pyx_L3_error) + __pyx_v_data_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_data_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1325, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1323, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.unsorted_data_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 1323, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_4unsorted_data_read4(__pyx_self, __pyx_v_record, __pyx_v_info, __pyx_v_tmp, __pyx_v_record_id_size, __pyx_v_data_block_length); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_record, PyObject *__pyx_v_info, PyObject *__pyx_v_tmp, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_data_block_length) { + char const *__pyx_v_bit_stream; + unsigned PY_LONG_LONG __pyx_v_position; + unsigned char __pyx_v_record_id_char; + unsigned short __pyx_v_record_id_short; + unsigned long __pyx_v_record_id_long; + unsigned PY_LONG_LONG __pyx_v_record_id_long_long; + PyObject *__pyx_v_buf = 0; + PyObject *__pyx_v_VLSD = 0; + PyObject *__pyx_v_pos_byte_beg = 0; + PyObject *__pyx_v_pos_byte_end = 0; + PyObject *__pyx_v_c_format_structure = 0; + CYTHON_UNUSED PyObject *__pyx_v_byte_length = 0; + PyObject *__pyx_v_numpy_format = 0; + PyObject *__pyx_v_index = 0; + PyObject *__pyx_v_CGrecordLength = 0; + PyObject *__pyx_v_VLSD_flag = 0; + PyObject *__pyx_v_VLSD_CG_name = 0; + PyObject *__pyx_v_VLSD_CG_signal_data_type = 0; + PyObject *__pyx_v_channel_name_set = 0; + PyObject *__pyx_v_record_id = NULL; + PyObject *__pyx_v_Channel = NULL; + PyObject *__pyx_v_name = NULL; + PyObject *__pyx_v_channel_name = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + PyObject *__pyx_t_2 = NULL; + Py_ssize_t __pyx_t_3; + PyObject *(*__pyx_t_4)(PyObject *); + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + int __pyx_t_7; + PyObject *__pyx_t_8 = NULL; + unsigned int __pyx_t_9; + Py_ssize_t __pyx_t_10; + Py_ssize_t __pyx_t_11; + int __pyx_t_12; + int __pyx_t_13; + PyObject *__pyx_t_14 = NULL; + PyObject *__pyx_t_15 = NULL; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + PyObject *(*__pyx_t_19)(PyObject *); + unsigned PY_LONG_LONG __pyx_t_20; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("unsorted_data_read4", 1); + + /* "dataRead.pyx":1347 + * + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< + * cdef unsigned long long position = 0 + * cdef unsigned char record_id_char = 0 + */ + __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1347, __pyx_L1_error) + __pyx_v_bit_stream = __pyx_t_1; + + /* "dataRead.pyx":1348 + * """ + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * cdef unsigned long long position = 0 # <<<<<<<<<<<<<< + * cdef unsigned char record_id_char = 0 + * cdef unsigned short record_id_short = 0 + */ + __pyx_v_position = 0; + + /* "dataRead.pyx":1349 + * cdef const char* bit_stream = PyBytes_AsString(tmp) + * cdef unsigned long long position = 0 + * cdef unsigned char record_id_char = 0 # <<<<<<<<<<<<<< + * cdef unsigned short record_id_short = 0 + * cdef unsigned long record_id_long = 0 + */ + __pyx_v_record_id_char = 0; + + /* "dataRead.pyx":1350 + * cdef unsigned long long position = 0 + * cdef unsigned char record_id_char = 0 + * cdef unsigned short record_id_short = 0 # <<<<<<<<<<<<<< + * cdef unsigned long record_id_long = 0 + * cdef unsigned long long record_id_long_long = 0 + */ + __pyx_v_record_id_short = 0; + + /* "dataRead.pyx":1351 + * cdef unsigned char record_id_char = 0 + * cdef unsigned short record_id_short = 0 + * cdef unsigned long record_id_long = 0 # <<<<<<<<<<<<<< + * cdef unsigned long long record_id_long_long = 0 + * # initialise data structure + */ + __pyx_v_record_id_long = 0; + + /* "dataRead.pyx":1352 + * cdef unsigned short record_id_short = 0 + * cdef unsigned long record_id_long = 0 + * cdef unsigned long long record_id_long_long = 0 # <<<<<<<<<<<<<< + * # initialise data structure + * # key is channel name + */ + __pyx_v_record_id_long_long = 0; + + /* "dataRead.pyx":1355 + * # initialise data structure + * # key is channel name + * cdef dict buf = {} # <<<<<<<<<<<<<< + * cdef dict VLSD = {} + * cdef dict pos_byte_beg = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1355, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_buf = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1356 + * # key is channel name + * cdef dict buf = {} + * cdef dict VLSD = {} # <<<<<<<<<<<<<< + * cdef dict pos_byte_beg = {} + * cdef dict pos_byte_end = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1356, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_VLSD = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1357 + * cdef dict buf = {} + * cdef dict VLSD = {} + * cdef dict pos_byte_beg = {} # <<<<<<<<<<<<<< + * cdef dict pos_byte_end = {} + * cdef dict c_format_structure = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1357, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_pos_byte_beg = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1358 + * cdef dict VLSD = {} + * cdef dict pos_byte_beg = {} + * cdef dict pos_byte_end = {} # <<<<<<<<<<<<<< + * cdef dict c_format_structure = {} + * cdef dict byte_length = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1358, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_pos_byte_end = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1359 + * cdef dict pos_byte_beg = {} + * cdef dict pos_byte_end = {} + * cdef dict c_format_structure = {} # <<<<<<<<<<<<<< + * cdef dict byte_length = {} + * cdef dict numpy_format = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1359, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_c_format_structure = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1360 + * cdef dict pos_byte_end = {} + * cdef dict c_format_structure = {} + * cdef dict byte_length = {} # <<<<<<<<<<<<<< + * cdef dict numpy_format = {} + * # key is record id + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1360, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_byte_length = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1361 + * cdef dict c_format_structure = {} + * cdef dict byte_length = {} + * cdef dict numpy_format = {} # <<<<<<<<<<<<<< + * # key is record id + * cdef dict index = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1361, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_numpy_format = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1363 + * cdef dict numpy_format = {} + * # key is record id + * cdef dict index = {} # <<<<<<<<<<<<<< + * cdef dict CGrecordLength = {} + * cdef dict VLSD_flag = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1363, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_index = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1364 + * # key is record id + * cdef dict index = {} + * cdef dict CGrecordLength = {} # <<<<<<<<<<<<<< + * cdef dict VLSD_flag = {} + * cdef dict VLSD_CG_name = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1364, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_CGrecordLength = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1365 + * cdef dict index = {} + * cdef dict CGrecordLength = {} + * cdef dict VLSD_flag = {} # <<<<<<<<<<<<<< + * cdef dict VLSD_CG_name = {} + * cdef dict VLSD_CG_signal_data_type = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1365, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_VLSD_flag = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1366 + * cdef dict CGrecordLength = {} + * cdef dict VLSD_flag = {} + * cdef dict VLSD_CG_name = {} # <<<<<<<<<<<<<< + * cdef dict VLSD_CG_signal_data_type = {} + * cdef dict channel_name_set = {} + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1366, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_VLSD_CG_name = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1367 + * cdef dict VLSD_flag = {} + * cdef dict VLSD_CG_name = {} + * cdef dict VLSD_CG_signal_data_type = {} # <<<<<<<<<<<<<< + * cdef dict channel_name_set = {} + * for record_id in record: + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1367, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_VLSD_CG_signal_data_type = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1368 + * cdef dict VLSD_CG_name = {} + * cdef dict VLSD_CG_signal_data_type = {} + * cdef dict channel_name_set = {} # <<<<<<<<<<<<<< + * for record_id in record: + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + */ + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1368, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_v_channel_name_set = ((PyObject*)__pyx_t_2); + __pyx_t_2 = 0; + + /* "dataRead.pyx":1369 + * cdef dict VLSD_CG_signal_data_type = {} + * cdef dict channel_name_set = {} + * for record_id in record: # <<<<<<<<<<<<<< + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + * VLSD_flag[record_id] = True + */ + if (likely(PyList_CheckExact(__pyx_v_record)) || PyTuple_CheckExact(__pyx_v_record)) { + __pyx_t_2 = __pyx_v_record; __Pyx_INCREF(__pyx_t_2); + __pyx_t_3 = 0; + __pyx_t_4 = NULL; + } else { + __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_record); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1369, __pyx_L1_error) + } + for (;;) { + if (likely(!__pyx_t_4)) { + if (likely(PyList_CheckExact(__pyx_t_2))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1369, __pyx_L1_error) + #endif + if (__pyx_t_3 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1369, __pyx_L1_error) + #else + __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1369, __pyx_L1_error) + #endif + if (__pyx_t_3 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1369, __pyx_L1_error) + #else + __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1369, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + #endif + } + } else { + __pyx_t_5 = __pyx_t_4(__pyx_t_2); + if (unlikely(!__pyx_t_5)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 1369, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_5); + } + __Pyx_XDECREF_SET(__pyx_v_record_id, __pyx_t_5); + __pyx_t_5 = 0; + + /* "dataRead.pyx":1370 + * cdef dict channel_name_set = {} + * for record_id in record: + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< + * VLSD_flag[record_id] = True + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + */ + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1370, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1370, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_Flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1370, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyInt_AndObjC(__pyx_t_5, __pyx_int_33, 33, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1370, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1370, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (__pyx_t_7) { + + /* "dataRead.pyx":1371 + * for record_id in record: + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + * VLSD_flag[record_id] = True # <<<<<<<<<<<<<< + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] + */ + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_True) < 0))) __PYX_ERR(0, 1371, __pyx_L1_error) + + /* "dataRead.pyx":1372 + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + * VLSD_flag[record_id] = True + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] # <<<<<<<<<<<<<< + * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] + * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) + */ + __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channelName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_t_5, __pyx_t_6) < 0))) __PYX_ERR(0, 1372, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "dataRead.pyx":1373 + * VLSD_flag[record_id] = True + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] # <<<<<<<<<<<<<< + * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) + * else: + */ + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_channelName); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1373, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1373, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "dataRead.pyx":1374 + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] + * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) # <<<<<<<<<<<<<< + * else: + * VLSD_flag[record_id] = False + */ + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channel); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_signal_data_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_5 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_8))) { + __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_8); + if (likely(__pyx_t_5)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); + __Pyx_INCREF(__pyx_t_5); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_8, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_info}; + __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1374, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1374, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "dataRead.pyx":1370 + * cdef dict channel_name_set = {} + * for record_id in record: + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< + * VLSD_flag[record_id] = True + * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] + */ + goto __pyx_L5; + } + + /* "dataRead.pyx":1376 + * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) + * else: + * VLSD_flag[record_id] = False # <<<<<<<<<<<<<< + * for Channel in record[record_id]['record'].values(): + * #if not Channel.VLSD_CG_Flag: + */ + /*else*/ { + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_False) < 0))) __PYX_ERR(0, 1376, __pyx_L1_error) + + /* "dataRead.pyx":1377 + * else: + * VLSD_flag[record_id] = False + * for Channel in record[record_id]['record'].values(): # <<<<<<<<<<<<<< + * #if not Channel.VLSD_CG_Flag: + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), + */ + __pyx_t_10 = 0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(__pyx_t_5 == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); + __PYX_ERR(0, 1377, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_XDECREF(__pyx_t_6); + __pyx_t_6 = __pyx_t_8; + __pyx_t_8 = 0; + while (1) { + __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_10, NULL, &__pyx_t_8, NULL, __pyx_t_12); + if (unlikely(__pyx_t_13 == 0)) break; + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1377, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF_SET(__pyx_v_Channel, __pyx_t_8); + __pyx_t_8 = 0; + + /* "dataRead.pyx":1379 + * for Channel in record[record_id]['record'].values(): + * #if not Channel.VLSD_CG_Flag: + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') + * numpy_format[Channel.name] = Channel.data_format(info) + */ + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_numberOfRecords); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_GIVEREF(__pyx_t_8); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error); + __pyx_t_8 = 0; + __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_14); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14)) __PYX_ERR(0, 1379, __pyx_L1_error); + __pyx_t_14 = 0; + + /* "dataRead.pyx":1380 + * #if not Channel.VLSD_CG_Flag: + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') # <<<<<<<<<<<<<< + * numpy_format[Channel.name] = Channel.data_format(info) + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + */ + __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_18 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_16))) { + __pyx_t_18 = PyMethod_GET_SELF(__pyx_t_16); + if (likely(__pyx_t_18)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_16); + __Pyx_INCREF(__pyx_t_18); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_16, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_18, __pyx_t_17}; + __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; + __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; + if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1380, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + } + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 1380, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 1380, __pyx_L1_error) + + /* "dataRead.pyx":1379 + * for Channel in record[record_id]['record'].values(): + * #if not Channel.VLSD_CG_Flag: + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') + * numpy_format[Channel.name] = Channel.data_format(info) + */ + __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + + /* "dataRead.pyx":1381 + * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') + * numpy_format[Channel.name] = Channel.data_format(info) # <<<<<<<<<<<<<< + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + */ + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_data_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_8 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_14))) { + __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14); + if (likely(__pyx_t_8)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_14, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_info}; + __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; + if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1381, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + if (unlikely((PyDict_SetItem(__pyx_v_numpy_format, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 1381, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + + /* "dataRead.pyx":1382 + * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') + * numpy_format[Channel.name] = Channel.data_format(info) + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset # <<<<<<<<<<<<<< + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + * index[record_id] = 0 + */ + __pyx_t_15 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_byteOffset); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_beg, __pyx_t_14, __pyx_t_8) < 0))) __PYX_ERR(0, 1382, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + + /* "dataRead.pyx":1383 + * numpy_format[Channel.name] = Channel.data_format(info) + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned # <<<<<<<<<<<<<< + * index[record_id] = 0 + * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength + */ + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_pos_byte_beg, __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_15 = PyNumber_Add(__pyx_t_14, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1383, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_end, __pyx_t_8, __pyx_t_15) < 0))) __PYX_ERR(0, 1383, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "dataRead.pyx":1384 + * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + * index[record_id] = 0 # <<<<<<<<<<<<<< + * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength + * channel_name_set[record_id] = record[record_id]['record'].channelNames + */ + if (unlikely((PyDict_SetItem(__pyx_v_index, __pyx_v_record_id, __pyx_int_0) < 0))) __PYX_ERR(0, 1384, __pyx_L1_error) + + /* "dataRead.pyx":1385 + * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned + * index[record_id] = 0 + * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength # <<<<<<<<<<<<<< + * channel_name_set[record_id] = record[record_id]['record'].channelNames + * # read data + */ + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_CGrecordLength); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_CGrecordLength, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1385, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "dataRead.pyx":1386 + * index[record_id] = 0 + * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength + * channel_name_set[record_id] = record[record_id]['record'].channelNames # <<<<<<<<<<<<<< + * # read data + * if record_id_size == 1: + */ + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1386, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1386, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_channelNames); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1386, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + if (unlikely((PyDict_SetItem(__pyx_v_channel_name_set, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1386, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __pyx_L5:; + + /* "dataRead.pyx":1369 + * cdef dict VLSD_CG_signal_data_type = {} + * cdef dict channel_name_set = {} + * for record_id in record: # <<<<<<<<<<<<<< + * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) + * VLSD_flag[record_id] = True + */ + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "dataRead.pyx":1388 + * channel_name_set[record_id] = record[record_id]['record'].channelNames + * # read data + * if record_id_size == 1: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) + */ + switch (__pyx_v_record_id_size) { + case 1: + + /* "dataRead.pyx":1389 + * # read data + * if record_id_size == 1: + * while position < data_block_length: # <<<<<<<<<<<<<< + * memcpy(&record_id_char, &bit_stream[position], 1) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, + */ + while (1) { + __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); + if (!__pyx_t_7) break; + + /* "dataRead.pyx":1390 + * if record_id_size == 1: + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) # <<<<<<<<<<<<<< + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + */ + (void)(memcpy((&__pyx_v_record_id_char), (&(__pyx_v_bit_stream[__pyx_v_position])), 1)); + + /* "dataRead.pyx":1391 + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + */ + __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_record_id_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1391, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "dataRead.pyx":1394 + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< + * elif record_id_size == 2: + * while position < data_block_length: + */ + __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 1, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1391, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1391, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_15 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 2); + __pyx_t_14 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_14); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1391, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; + __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1391, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L11_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1391, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L12_unpacking_done; + __pyx_L11_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1391, __pyx_L1_error) + __pyx_L12_unpacking_done:; + } + + /* "dataRead.pyx":1391 + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + */ + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1391, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1391, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1391, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 1391, __pyx_L1_error) + __pyx_v_position = __pyx_t_20; + __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_14)); + __pyx_t_14 = 0; + } + + /* "dataRead.pyx":1388 + * channel_name_set[record_id] = record[record_id]['record'].channelNames + * # read data + * if record_id_size == 1: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_char, &bit_stream[position], 1) + */ + break; + case 2: + + /* "dataRead.pyx":1396 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 2: + * while position < data_block_length: # <<<<<<<<<<<<<< + * memcpy(&record_id_short, &bit_stream[position], 2) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, + */ + while (1) { + __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); + if (!__pyx_t_7) break; + + /* "dataRead.pyx":1397 + * elif record_id_size == 2: + * while position < data_block_length: + * memcpy(&record_id_short, &bit_stream[position], 2) # <<<<<<<<<<<<<< + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + */ + (void)(memcpy((&__pyx_v_record_id_short), (&(__pyx_v_bit_stream[__pyx_v_position])), 2)); + + /* "dataRead.pyx":1398 + * while position < data_block_length: + * memcpy(&record_id_short, &bit_stream[position], 2) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + */ + __pyx_t_6 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_short); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + + /* "dataRead.pyx":1401 + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< + * elif record_id_size == 3: + * while position < data_block_length: + */ + __pyx_t_14 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_6, 2, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) { + PyObject* sequence = __pyx_t_14; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1398, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_6 = PyList_GET_ITEM(sequence, 0); + __pyx_t_8 = PyList_GET_ITEM(sequence, 1); + __pyx_t_15 = PyList_GET_ITEM(sequence, 2); + __pyx_t_2 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_2); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1398, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; + __pyx_t_5 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L15_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1398, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L16_unpacking_done; + __pyx_L15_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1398, __pyx_L1_error) + __pyx_L16_unpacking_done:; + } + + /* "dataRead.pyx":1398 + * while position < data_block_length: + * memcpy(&record_id_short, &bit_stream[position], 2) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + */ + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_6); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1398, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1398, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1398, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 1398, __pyx_L1_error) + __pyx_v_position = __pyx_t_20; + __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_2)); + __pyx_t_2 = 0; + } + + /* "dataRead.pyx":1395 + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 2: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_short, &bit_stream[position], 2) + */ + break; + case 3: + + /* "dataRead.pyx":1403 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 3: + * while position < data_block_length: # <<<<<<<<<<<<<< + * memcpy(&record_id_long, &bit_stream[position], 4) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, + */ + while (1) { + __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); + if (!__pyx_t_7) break; + + /* "dataRead.pyx":1404 + * elif record_id_size == 3: + * while position < data_block_length: + * memcpy(&record_id_long, &bit_stream[position], 4) # <<<<<<<<<<<<<< + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + */ + (void)(memcpy((&__pyx_v_record_id_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); + + /* "dataRead.pyx":1405 + * while position < data_block_length: + * memcpy(&record_id_long, &bit_stream[position], 4) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + */ + __pyx_t_14 = __Pyx_PyInt_From_unsigned_long(__pyx_v_record_id_long); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + + /* "dataRead.pyx":1408 + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< + * elif record_id_size == 4: + * while position < data_block_length: + */ + __pyx_t_2 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_14, 4, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { + PyObject* sequence = __pyx_t_2; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1405, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_14 = PyList_GET_ITEM(sequence, 0); + __pyx_t_15 = PyList_GET_ITEM(sequence, 1); + __pyx_t_8 = PyList_GET_ITEM(sequence, 2); + __pyx_t_6 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_14); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_6); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1405, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; + __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L19_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1405, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L20_unpacking_done; + __pyx_L19_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1405, __pyx_L1_error) + __pyx_L20_unpacking_done:; + } + + /* "dataRead.pyx":1405 + * while position < data_block_length: + * memcpy(&record_id_long, &bit_stream[position], 4) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + */ + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_14); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1405, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1405, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1405, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_6))) __PYX_ERR(0, 1405, __pyx_L1_error) + __pyx_v_position = __pyx_t_20; + __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_6)); + __pyx_t_6 = 0; + } + + /* "dataRead.pyx":1402 + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 3: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_long, &bit_stream[position], 4) + */ + break; + case 4: + + /* "dataRead.pyx":1410 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 4: + * while position < data_block_length: # <<<<<<<<<<<<<< + * memcpy(&record_id_long_long, &bit_stream[position], 8) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, + */ + while (1) { + __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); + if (!__pyx_t_7) break; + + /* "dataRead.pyx":1411 + * elif record_id_size == 4: + * while position < data_block_length: + * memcpy(&record_id_long_long, &bit_stream[position], 8) # <<<<<<<<<<<<<< + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + */ + (void)(memcpy((&__pyx_v_record_id_long_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 8)); + + /* "dataRead.pyx":1412 + * while position < data_block_length: + * memcpy(&record_id_long_long, &bit_stream[position], 8) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + */ + __pyx_t_2 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_record_id_long_long); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "dataRead.pyx":1415 + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< + * # changing from bytes type to desired type + * if buf: + */ + __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 8, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { + PyObject* sequence = __pyx_t_6; + Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); + if (unlikely(size != 4)) { + if (size > 4) __Pyx_RaiseTooManyValuesError(4); + else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); + __PYX_ERR(0, 1412, __pyx_L1_error) + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + if (likely(PyTuple_CheckExact(sequence))) { + __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); + __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); + __pyx_t_15 = PyTuple_GET_ITEM(sequence, 2); + __pyx_t_14 = PyTuple_GET_ITEM(sequence, 3); + } else { + __pyx_t_2 = PyList_GET_ITEM(sequence, 0); + __pyx_t_8 = PyList_GET_ITEM(sequence, 1); + __pyx_t_15 = PyList_GET_ITEM(sequence, 2); + __pyx_t_14 = PyList_GET_ITEM(sequence, 3); + } + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(__pyx_t_8); + __Pyx_INCREF(__pyx_t_15); + __Pyx_INCREF(__pyx_t_14); + #else + { + Py_ssize_t i; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; + for (i=0; i < 4; i++) { + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1412, __pyx_L1_error) + __Pyx_GOTREF(item); + *(temps[i]) = item; + } + } + #endif + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } else { + Py_ssize_t index = -1; + PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; + __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1412, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); + for (index=0; index < 4; index++) { + PyObject* item = __pyx_t_19(__pyx_t_5); if (unlikely(!item)) goto __pyx_L23_unpacking_failed; + __Pyx_GOTREF(item); + *(temps[index]) = item; + } + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1412, __pyx_L1_error) + __pyx_t_19 = NULL; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + goto __pyx_L24_unpacking_done; + __pyx_L23_unpacking_failed:; + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_t_19 = NULL; + if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); + __PYX_ERR(0, 1412, __pyx_L1_error) + __pyx_L24_unpacking_done:; + } + + /* "dataRead.pyx":1412 + * while position < data_block_length: + * memcpy(&record_id_long_long, &bit_stream[position], 8) + * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< + * position, buf, VLSD, pos_byte_beg, pos_byte_end, + * c_format_structure, index, CGrecordLength, + */ + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1412, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1412, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1412, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 1412, __pyx_L1_error) + __pyx_v_position = __pyx_t_20; + __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); + __pyx_t_8 = 0; + __Pyx_DECREF_SET(__pyx_v_VLSD, ((PyObject*)__pyx_t_15)); + __pyx_t_15 = 0; + __Pyx_DECREF_SET(__pyx_v_index, ((PyObject*)__pyx_t_14)); + __pyx_t_14 = 0; + } + + /* "dataRead.pyx":1409 + * c_format_structure, index, CGrecordLength, + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * elif record_id_size == 4: # <<<<<<<<<<<<<< + * while position < data_block_length: + * memcpy(&record_id_long_long, &bit_stream[position], 8) + */ + break; + default: break; + } + + /* "dataRead.pyx":1417 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * # changing from bytes type to desired type + * if buf: # <<<<<<<<<<<<<< + * for name in buf.keys(): + * buf[name] = buf[name].view(dtype=numpy_format[name]) + */ + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_buf); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1417, __pyx_L1_error) + if (__pyx_t_7) { + + /* "dataRead.pyx":1418 + * # changing from bytes type to desired type + * if buf: + * for name in buf.keys(): # <<<<<<<<<<<<<< + * buf[name] = buf[name].view(dtype=numpy_format[name]) + * # convert list to array for VLSD only + */ + __pyx_t_3 = 0; + if (unlikely(__pyx_v_buf == Py_None)) { + PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys"); + __PYX_ERR(0, 1418, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_buf, 1, __pyx_n_s_keys, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_6); + __pyx_t_6 = __pyx_t_14; + __pyx_t_14 = 0; + while (1) { + __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_3, &__pyx_t_14, NULL, NULL, __pyx_t_12); + if (unlikely(__pyx_t_13 == 0)) break; + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_14); + __pyx_t_14 = 0; + + /* "dataRead.pyx":1419 + * if buf: + * for name in buf.keys(): + * buf[name] = buf[name].view(dtype=numpy_format[name]) # <<<<<<<<<<<<<< + * # convert list to array for VLSD only + * if VLSD: + */ + if (unlikely(__pyx_v_buf == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1419, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_buf, __pyx_v_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_view); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_numpy_format, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(__pyx_v_buf == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1419, __pyx_L1_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_v_name, __pyx_t_8) < 0))) __PYX_ERR(0, 1419, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "dataRead.pyx":1417 + * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) + * # changing from bytes type to desired type + * if buf: # <<<<<<<<<<<<<< + * for name in buf.keys(): + * buf[name] = buf[name].view(dtype=numpy_format[name]) + */ + } + + /* "dataRead.pyx":1421 + * buf[name] = buf[name].view(dtype=numpy_format[name]) + * # convert list to array for VLSD only + * if VLSD: # <<<<<<<<<<<<<< + * for channel_name in VLSD: + * VLSD[channel_name] = np.array(VLSD[channel_name]) + */ + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_VLSD); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1421, __pyx_L1_error) + if (__pyx_t_7) { + + /* "dataRead.pyx":1422 + * # convert list to array for VLSD only + * if VLSD: + * for channel_name in VLSD: # <<<<<<<<<<<<<< + * VLSD[channel_name] = np.array(VLSD[channel_name]) + * buf.update(VLSD) + */ + __pyx_t_11 = 0; + if (unlikely(__pyx_v_VLSD == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); + __PYX_ERR(0, 1422, __pyx_L1_error) + } + __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_VLSD, 1, ((PyObject *)NULL), (&__pyx_t_3), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_6); + __pyx_t_6 = __pyx_t_8; + __pyx_t_8 = 0; + while (1) { + __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_3, &__pyx_t_11, &__pyx_t_8, NULL, NULL, __pyx_t_12); + if (unlikely(__pyx_t_13 == 0)) break; + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_8); + __pyx_t_8 = 0; + + /* "dataRead.pyx":1423 + * if VLSD: + * for channel_name in VLSD: + * VLSD[channel_name] = np.array(VLSD[channel_name]) # <<<<<<<<<<<<<< + * buf.update(VLSD) + * return buf + */ + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_15); + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(__pyx_v_VLSD == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1423, __pyx_L1_error) + } + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_VLSD, __pyx_v_channel_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_14); + __pyx_t_2 = NULL; + __pyx_t_9 = 0; + #if CYTHON_UNPACK_METHODS + if (unlikely(PyMethod_Check(__pyx_t_15))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_15); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_15, function); + __pyx_t_9 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_14}; + __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; + } + if (unlikely(__pyx_v_VLSD == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1423, __pyx_L1_error) + } + if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_v_channel_name, __pyx_t_8) < 0))) __PYX_ERR(0, 1423, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + } + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "dataRead.pyx":1424 + * for channel_name in VLSD: + * VLSD[channel_name] = np.array(VLSD[channel_name]) + * buf.update(VLSD) # <<<<<<<<<<<<<< + * return buf + * + */ + __pyx_t_6 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_buf, __pyx_v_VLSD); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + + /* "dataRead.pyx":1421 + * buf[name] = buf[name].view(dtype=numpy_format[name]) + * # convert list to array for VLSD only + * if VLSD: # <<<<<<<<<<<<<< + * for channel_name in VLSD: + * VLSD[channel_name] = np.array(VLSD[channel_name]) + */ + } + + /* "dataRead.pyx":1425 + * VLSD[channel_name] = np.array(VLSD[channel_name]) + * buf.update(VLSD) + * return buf # <<<<<<<<<<<<<< + * + * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_buf); + __pyx_r = __pyx_v_buf; + goto __pyx_L0; + + /* "dataRead.pyx":1323 + * return buf.byteswap() + * + * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< + * const unsigned short record_id_size, + * const unsigned long long data_block_length): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_XDECREF(__pyx_t_14); + __Pyx_XDECREF(__pyx_t_15); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_XDECREF(__pyx_t_18); + __Pyx_AddTraceback("dataRead.unsorted_data_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_buf); + __Pyx_XDECREF(__pyx_v_VLSD); + __Pyx_XDECREF(__pyx_v_pos_byte_beg); + __Pyx_XDECREF(__pyx_v_pos_byte_end); + __Pyx_XDECREF(__pyx_v_c_format_structure); + __Pyx_XDECREF(__pyx_v_byte_length); + __Pyx_XDECREF(__pyx_v_numpy_format); + __Pyx_XDECREF(__pyx_v_index); + __Pyx_XDECREF(__pyx_v_CGrecordLength); + __Pyx_XDECREF(__pyx_v_VLSD_flag); + __Pyx_XDECREF(__pyx_v_VLSD_CG_name); + __Pyx_XDECREF(__pyx_v_VLSD_CG_signal_data_type); + __Pyx_XDECREF(__pyx_v_channel_name_set); + __Pyx_XDECREF(__pyx_v_record_id); + __Pyx_XDECREF(__pyx_v_Channel); + __Pyx_XDECREF(__pyx_v_name); + __Pyx_XDECREF(__pyx_v_channel_name); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":1427 + * return buf + * + * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< + * unsigned short record_id_size, unsigned long long position, + * buf, VLSD, pos_byte_beg, pos_byte_end, c_format_structure, + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__pyx_v_bit_stream, PyObject *__pyx_v_tmp, PyObject *__pyx_v_record_id, unsigned short __pyx_v_record_id_size, unsigned PY_LONG_LONG __pyx_v_position, PyObject *__pyx_v_buf, PyObject *__pyx_v_VLSD, PyObject *__pyx_v_pos_byte_beg, PyObject *__pyx_v_pos_byte_end, CYTHON_UNUSED PyObject *__pyx_v_c_format_structure, PyObject *__pyx_v_index, PyObject *__pyx_v_CGrecordLength, PyObject *__pyx_v_VLSD_flag, PyObject *__pyx_v_VLSD_CG_name, PyObject *__pyx_v_VLSD_CG_signal_data_type, PyObject *__pyx_v_channel_name_set) { + unsigned long __pyx_v_VLSDLen; + PyObject *__pyx_v_channel_name = NULL; + PyObject *__pyx_v_signal_data_type = NULL; + PyObject *__pyx_v_temp = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + int __pyx_t_3; + PyObject *__pyx_t_4 = NULL; + Py_ssize_t __pyx_t_5; + PyObject *(*__pyx_t_6)(PyObject *); + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + Py_ssize_t __pyx_t_9; + Py_ssize_t __pyx_t_10; + Py_ssize_t __pyx_t_11; + unsigned PY_LONG_LONG __pyx_t_12; + int __pyx_t_13; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("unsorted_read4", 1); + + /* "dataRead.pyx":1432 + * index, CGrecordLength, VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, + * channel_name_set): + * cdef unsigned long VLSDLen = 0 # <<<<<<<<<<<<<< + * if not VLSD_flag[record_id]: # not VLSD CG) + * for channel_name in channel_name_set[record_id]: # list of channel classes + */ + __pyx_v_VLSDLen = 0; + + /* "dataRead.pyx":1433 + * channel_name_set): + * cdef unsigned long VLSDLen = 0 + * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< + * for channel_name in channel_name_set[record_id]: # list of channel classes + * buf[channel_name][index[record_id]] = \ + */ + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_flag, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1433, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1433, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_3 = (!__pyx_t_2); + if (__pyx_t_3) { + + /* "dataRead.pyx":1434 + * cdef unsigned long VLSDLen = 0 + * if not VLSD_flag[record_id]: # not VLSD CG) + * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< + * buf[channel_name][index[record_id]] = \ + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + */ + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_channel_name_set, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { + __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); + __pyx_t_5 = 0; + __pyx_t_6 = NULL; + } else { + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1434, __pyx_L1_error) + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + for (;;) { + if (likely(!__pyx_t_6)) { + if (likely(PyList_CheckExact(__pyx_t_4))) { + { + Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } else { + { + Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); + #if !CYTHON_ASSUME_SAFE_MACROS + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) + #endif + if (__pyx_t_5 >= __pyx_temp) break; + } + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) + #else + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + #endif + } + } else { + __pyx_t_1 = __pyx_t_6(__pyx_t_4); + if (unlikely(!__pyx_t_1)) { + PyObject* exc_type = PyErr_Occurred(); + if (exc_type) { + if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); + else __PYX_ERR(0, 1434, __pyx_L1_error) + } + break; + } + __Pyx_GOTREF(__pyx_t_1); + } + __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_1); + __pyx_t_1 = 0; + + /* "dataRead.pyx":1436 + * for channel_name in channel_name_set[record_id]: # list of channel classes + * buf[channel_name][index[record_id]] = \ + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] # <<<<<<<<<<<<<< + * index[record_id] += 1 + * position += CGrecordLength[record_id] + */ + if (unlikely(__pyx_v_tmp == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 1436, __pyx_L1_error) + } + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_beg, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_3 = (__pyx_t_8 == Py_None); + if (__pyx_t_3) { + __pyx_t_9 = 0; + } else { + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_9 = __pyx_t_10; + } + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_8 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_end, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __pyx_t_3 = (__pyx_t_1 == Py_None); + if (__pyx_t_3) { + __pyx_t_10 = PY_SSIZE_T_MAX; + } else { + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_10 = __pyx_t_11; + } + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PySequence_GetSlice(__pyx_v_tmp, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + + /* "dataRead.pyx":1435 + * if not VLSD_flag[record_id]: # not VLSD CG) + * for channel_name in channel_name_set[record_id]: # list of channel classes + * buf[channel_name][index[record_id]] = \ # <<<<<<<<<<<<<< + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + * index[record_id] += 1 + */ + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_buf, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1435, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_t_8, __pyx_t_1) < 0))) __PYX_ERR(0, 1435, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dataRead.pyx":1434 + * cdef unsigned long VLSDLen = 0 + * if not VLSD_flag[record_id]: # not VLSD CG) + * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< + * buf[channel_name][index[record_id]] = \ + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + */ + } + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1437 + * buf[channel_name][index[record_id]] = \ + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + * index[record_id] += 1 # <<<<<<<<<<<<<< + * position += CGrecordLength[record_id] + * else: # VLSD CG + */ + __Pyx_INCREF(__pyx_v_record_id); + __pyx_t_4 = __pyx_v_record_id; + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1437, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely((PyObject_SetItem(__pyx_v_index, __pyx_t_4, __pyx_t_8) < 0))) __PYX_ERR(0, 1437, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1438 + * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] + * index[record_id] += 1 + * position += CGrecordLength[record_id] # <<<<<<<<<<<<<< + * else: # VLSD CG + * position += record_id_size + */ + __pyx_t_4 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_CGrecordLength, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1438, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_12 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_1); if (unlikely((__pyx_t_12 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1438, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_position = __pyx_t_12; + + /* "dataRead.pyx":1433 + * channel_name_set): + * cdef unsigned long VLSDLen = 0 + * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< + * for channel_name in channel_name_set[record_id]: # list of channel classes + * buf[channel_name][index[record_id]] = \ + */ + goto __pyx_L3; + } + + /* "dataRead.pyx":1440 + * position += CGrecordLength[record_id] + * else: # VLSD CG + * position += record_id_size # <<<<<<<<<<<<<< + * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length + * position += 4 + */ + /*else*/ { + __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_record_id_size)); + + /* "dataRead.pyx":1441 + * else: # VLSD CG + * position += record_id_size + * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length # <<<<<<<<<<<<<< + * position += 4 + * signal_data_type = VLSD_CG_signal_data_type[record_id] + */ + (void)(memcpy((&__pyx_v_VLSDLen), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); + + /* "dataRead.pyx":1442 + * position += record_id_size + * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length + * position += 4 # <<<<<<<<<<<<<< + * signal_data_type = VLSD_CG_signal_data_type[record_id] + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + */ + __pyx_v_position = (__pyx_v_position + 4); + + /* "dataRead.pyx":1443 + * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length + * position += 4 + * signal_data_type = VLSD_CG_signal_data_type[record_id] # <<<<<<<<<<<<<< + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + * if signal_data_type == 6: + */ + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1443, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_signal_data_type = __pyx_t_1; + __pyx_t_1 = 0; + + /* "dataRead.pyx":1444 + * position += 4 + * signal_data_type = VLSD_CG_signal_data_type[record_id] + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes # <<<<<<<<<<<<<< + * if signal_data_type == 6: + * temp = temp.decode('ISO8859') + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_position, ((__pyx_v_position + __pyx_v_VLSDLen) - 1) - __pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1444, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_temp = __pyx_t_8; + __pyx_t_8 = 0; + + /* "dataRead.pyx":1445 + * signal_data_type = VLSD_CG_signal_data_type[record_id] + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * temp = temp.decode('ISO8859') + * elif signal_data_type == 7: + */ + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_6, 6, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1445, __pyx_L1_error) + if (__pyx_t_3) { + + /* "dataRead.pyx":1446 + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + * if signal_data_type == 6: + * temp = temp.decode('ISO8859') # <<<<<<<<<<<<<< + * elif signal_data_type == 7: + * temp = temp.decode('utf-8') + */ + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1446, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); + __pyx_t_8 = 0; + + /* "dataRead.pyx":1445 + * signal_data_type = VLSD_CG_signal_data_type[record_id] + * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * temp = temp.decode('ISO8859') + * elif signal_data_type == 7: + */ + goto __pyx_L7; + } + + /* "dataRead.pyx":1447 + * if signal_data_type == 6: + * temp = temp.decode('ISO8859') + * elif signal_data_type == 7: # <<<<<<<<<<<<<< + * temp = temp.decode('utf-8') + * elif signal_data_type == 8: + */ + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_7, 7, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1447, __pyx_L1_error) + if (__pyx_t_3) { + + /* "dataRead.pyx":1448 + * temp = temp.decode('ISO8859') + * elif signal_data_type == 7: + * temp = temp.decode('utf-8') # <<<<<<<<<<<<<< + * elif signal_data_type == 8: + * temp = temp.decode('utf-16') + */ + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1450, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); + __pyx_t_8 = 0; + + /* "dataRead.pyx":1449 + * elif signal_data_type == 7: + * temp = temp.decode('utf-8') + * elif signal_data_type == 8: # <<<<<<<<<<<<<< + * temp = temp.decode('utf-16') + * VLSD[VLSD_CG_name[record_id]].append(temp) + */ + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_9, 9, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1451, __pyx_L1_error) + if (__pyx_t_3) { + + /* "dataRead.pyx":1452 + * temp = temp.decode('utf-16') # <<<<<<<<<<<<<< + * VLSD[VLSD_CG_name[record_id]].append(temp) + * position += VLSDLen + */ + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1452, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); + __pyx_t_8 = 0; + + /* "dataRead.pyx":1451 + * elif signal_data_type == 8: + * temp = temp.decode('utf-16') + * VLSD[VLSD_CG_name[record_id]].append(temp) + */ + } + __pyx_L7:; + + /* "dataRead.pyx":1453 + * elif signal_data_type == 9: + * temp = temp.decode('>utf-16') + * VLSD[VLSD_CG_name[record_id]].append(temp) # <<<<<<<<<<<<<< + * position += VLSDLen + * return position, buf, VLSD, index + */ + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1453, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_temp); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1453, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "dataRead.pyx":1454 + * temp = temp.decode('>utf-16') + * VLSD[VLSD_CG_name[record_id]].append(temp) + * position += VLSDLen # <<<<<<<<<<<<<< + * return position, buf, VLSD, index + * + */ + __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_VLSDLen)); + } + __pyx_L3:; + + /* "dataRead.pyx":1455 + * VLSD[VLSD_CG_name[record_id]].append(temp) + * position += VLSDLen + * return position, buf, VLSD, index # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1455, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1455, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1)) __PYX_ERR(0, 1455, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_buf); + __Pyx_GIVEREF(__pyx_v_buf); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_buf)) __PYX_ERR(0, 1455, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_VLSD); + __Pyx_GIVEREF(__pyx_v_VLSD); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_VLSD)) __PYX_ERR(0, 1455, __pyx_L1_error); + __Pyx_INCREF(__pyx_v_index); + __Pyx_GIVEREF(__pyx_v_index); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_index)) __PYX_ERR(0, 1455, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_r = __pyx_t_8; + __pyx_t_8 = 0; + goto __pyx_L0; + + /* "dataRead.pyx":1427 + * return buf + * + * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< + * unsigned short record_id_size, unsigned long long position, + * buf, VLSD, pos_byte_beg, pos_byte_end, c_format_structure, + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("dataRead.unsorted_read4", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_channel_name); + __Pyx_XDECREF(__pyx_v_signal_data_type); + __Pyx_XDECREF(__pyx_v_temp); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":1458 + * + * + * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< + * unsigned long long sd_block_length, unsigned long long n_records): + * """ Reads vlsd channel from its SD Block bytes + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_7sd_data_read(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8dataRead_6sd_data_read, " Reads vlsd channel from its SD Block bytes\n\n Parameters\n ----------------\n signal_data_type : int\n\n sd_block : bytes\n SD Block bytes\n\n sd_block_length: int\n SD Block data length (header not included)\n\n n_records: int\n number of records\n\n Returns\n -----------\n array\n "); +static PyMethodDef __pyx_mdef_8dataRead_7sd_data_read = {"sd_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_7sd_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_6sd_data_read}; +static PyObject *__pyx_pw_8dataRead_7sd_data_read(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + unsigned short __pyx_v_signal_data_type; + PyObject *__pyx_v_sd_block = 0; + CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length; + unsigned PY_LONG_LONG __pyx_v_n_records; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[4] = {0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("sd_data_read (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signal_data_type,&__pyx_n_s_sd_block,&__pyx_n_s_sd_block_length,&__pyx_n_s_n_records,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sd_block)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 1); __PYX_ERR(0, 1458, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sd_block_length)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 2); __PYX_ERR(0, 1458, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_records)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 3); __PYX_ERR(0, 1458, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sd_data_read") < 0)) __PYX_ERR(0, 1458, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 4)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + } + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + __pyx_v_sd_block = ((PyObject*)values[1]); + __pyx_v_sd_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_sd_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1459, __pyx_L3_error) + __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[3]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1459, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1458, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.sd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sd_block), (&PyBytes_Type), 1, "sd_block", 1))) __PYX_ERR(0, 1458, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_6sd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_sd_block, __pyx_v_sd_block_length, __pyx_v_n_records); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_sd_block, CYTHON_UNUSED unsigned PY_LONG_LONG __pyx_v_sd_block_length, unsigned PY_LONG_LONG __pyx_v_n_records) { + char const *__pyx_v_bit_stream; + unsigned long __pyx_v_max_len; + unsigned long __pyx_v_vlsd_len; + unsigned long *__pyx_v_VLSDLen; + unsigned PY_LONG_LONG *__pyx_v_pointer; + unsigned PY_LONG_LONG __pyx_v_rec; + PyObject *__pyx_v_channel_format = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + int __pyx_t_2; + int __pyx_t_3; + unsigned PY_LONG_LONG __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + int __pyx_t_6; + int __pyx_t_7; + char const *__pyx_t_8; + PyObject *__pyx_t_9 = NULL; + PyObject *__pyx_t_10 = NULL; + PyObject *__pyx_t_11 = NULL; + PyObject *__pyx_t_12 = NULL; + PyObject *__pyx_t_13 = NULL; + PyObject *__pyx_t_14 = NULL; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("sd_data_read", 1); + + /* "dataRead.pyx":1479 + * array + * """ + * cdef const char* bit_stream = PyBytes_AsString(sd_block) # <<<<<<<<<<<<<< + * cdef unsigned long max_len = 0 + * cdef unsigned long vlsd_len = 0 + */ + __pyx_t_1 = PyBytes_AsString(__pyx_v_sd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1479, __pyx_L1_error) + __pyx_v_bit_stream = __pyx_t_1; + + /* "dataRead.pyx":1480 + * """ + * cdef const char* bit_stream = PyBytes_AsString(sd_block) + * cdef unsigned long max_len = 0 # <<<<<<<<<<<<<< + * cdef unsigned long vlsd_len = 0 + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + */ + __pyx_v_max_len = 0; + + /* "dataRead.pyx":1481 + * cdef const char* bit_stream = PyBytes_AsString(sd_block) + * cdef unsigned long max_len = 0 + * cdef unsigned long vlsd_len = 0 # <<<<<<<<<<<<<< + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + */ + __pyx_v_vlsd_len = 0; + + /* "dataRead.pyx":1482 + * cdef unsigned long max_len = 0 + * cdef unsigned long vlsd_len = 0 + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) # <<<<<<<<<<<<<< + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + * cdef unsigned long long rec = 0 + */ + __pyx_v_VLSDLen = ((unsigned long *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned long))))); + + /* "dataRead.pyx":1483 + * cdef unsigned long vlsd_len = 0 + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) # <<<<<<<<<<<<<< + * cdef unsigned long long rec = 0 + * if not VLSDLen or not pointer: + */ + __pyx_v_pointer = ((unsigned PY_LONG_LONG *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned PY_LONG_LONG))))); + + /* "dataRead.pyx":1484 + * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + * cdef unsigned long long rec = 0 # <<<<<<<<<<<<<< + * if not VLSDLen or not pointer: + * raise MemoryError() + */ + __pyx_v_rec = 0; + + /* "dataRead.pyx":1485 + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + * cdef unsigned long long rec = 0 + * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< + * raise MemoryError() + * try: + */ + __pyx_t_3 = (!(__pyx_v_VLSDLen != 0)); + if (!__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_3 = (!(__pyx_v_pointer != 0)); + __pyx_t_2 = __pyx_t_3; + __pyx_L4_bool_binop_done:; + if (unlikely(__pyx_t_2)) { + + /* "dataRead.pyx":1486 + * cdef unsigned long long rec = 0 + * if not VLSDLen or not pointer: + * raise MemoryError() # <<<<<<<<<<<<<< + * try: + * pointer[0] = 0 + */ + PyErr_NoMemory(); __PYX_ERR(0, 1486, __pyx_L1_error) + + /* "dataRead.pyx":1485 + * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) + * cdef unsigned long long rec = 0 + * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< + * raise MemoryError() + * try: + */ + } + + /* "dataRead.pyx":1487 + * if not VLSDLen or not pointer: + * raise MemoryError() + * try: # <<<<<<<<<<<<<< + * pointer[0] = 0 + * VLSDLen[0] = 0 + */ + /*try:*/ { + + /* "dataRead.pyx":1488 + * raise MemoryError() + * try: + * pointer[0] = 0 # <<<<<<<<<<<<<< + * VLSDLen[0] = 0 + * for rec from 0 <= rec < n_records - 1 by 1: + */ + (__pyx_v_pointer[0]) = 0; + + /* "dataRead.pyx":1489 + * try: + * pointer[0] = 0 + * VLSDLen[0] = 0 # <<<<<<<<<<<<<< + * for rec from 0 <= rec < n_records - 1 by 1: + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + */ + (__pyx_v_VLSDLen[0]) = 0; + + /* "dataRead.pyx":1490 + * pointer[0] = 0 + * VLSDLen[0] = 0 + * for rec from 0 <= rec < n_records - 1 by 1: # <<<<<<<<<<<<<< + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len + */ + __pyx_t_4 = (__pyx_v_n_records - 1); + for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_4; __pyx_v_rec+=1) { + + /* "dataRead.pyx":1491 + * VLSDLen[0] = 0 + * for rec from 0 <= rec < n_records - 1 by 1: + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< + * VLSDLen[rec] = vlsd_len + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + */ + (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); + + /* "dataRead.pyx":1492 + * for rec from 0 <= rec < n_records - 1 by 1: + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + * if VLSDLen[rec] > max_len: + */ + (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; + + /* "dataRead.pyx":1493 + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] # <<<<<<<<<<<<<< + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] + */ + (__pyx_v_pointer[(__pyx_v_rec + 1)]) = (((__pyx_v_VLSDLen[__pyx_v_rec]) + 4) + (__pyx_v_pointer[__pyx_v_rec])); + + /* "dataRead.pyx":1494 + * VLSDLen[rec] = vlsd_len + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< + * max_len = VLSDLen[rec] + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + */ + __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); + if (__pyx_t_2) { + + /* "dataRead.pyx":1495 + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len + */ + __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); + + /* "dataRead.pyx":1494 + * VLSDLen[rec] = vlsd_len + * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] + * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< + * max_len = VLSDLen[rec] + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + */ + } + } + + /* "dataRead.pyx":1496 + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< + * VLSDLen[rec] = vlsd_len + * if VLSDLen[rec] > max_len: + */ + (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); + + /* "dataRead.pyx":1497 + * max_len = VLSDLen[rec] + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] + */ + (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; + + /* "dataRead.pyx":1498 + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len + * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< + * max_len = VLSDLen[rec] + * if max_len != 0: + */ + __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); + if (__pyx_t_2) { + + /* "dataRead.pyx":1499 + * VLSDLen[rec] = vlsd_len + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: + */ + __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); + + /* "dataRead.pyx":1498 + * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) + * VLSDLen[rec] = vlsd_len + * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< + * max_len = VLSDLen[rec] + * if max_len != 0: + */ + } + + /* "dataRead.pyx":1500 + * if VLSDLen[rec] > max_len: + * max_len = VLSDLen[rec] + * if max_len != 0: # <<<<<<<<<<<<<< + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: + */ + __pyx_t_2 = (__pyx_v_max_len != 0); + if (__pyx_t_2) { + + /* "dataRead.pyx":1501 + * max_len = VLSDLen[rec] + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< + * if signal_data_type == 6: + * channel_format = 'ISO8859' + */ + __pyx_t_3 = (__pyx_v_signal_data_type < 10); + if (!__pyx_t_3) { + } else { + __pyx_t_2 = __pyx_t_3; + goto __pyx_L15_bool_binop_done; + } + __pyx_t_3 = (__pyx_v_signal_data_type == 17); + __pyx_t_2 = __pyx_t_3; + __pyx_L15_bool_binop_done:; + if (__pyx_t_2) { + + /* "dataRead.pyx":1502 + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * channel_format = 'ISO8859' + * elif signal_data_type == 7: + */ + switch (__pyx_v_signal_data_type) { + case 6: + + /* "dataRead.pyx":1503 + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: + * channel_format = 'ISO8859' # <<<<<<<<<<<<<< + * elif signal_data_type == 7: + * channel_format = 'utf-8' + */ + __Pyx_INCREF(__pyx_n_u_ISO8859); + __pyx_v_channel_format = __pyx_n_u_ISO8859; + + /* "dataRead.pyx":1502 + * if max_len != 0: + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * channel_format = 'ISO8859' + * elif signal_data_type == 7: + */ + break; + case 7: + + /* "dataRead.pyx":1505 + * channel_format = 'ISO8859' + * elif signal_data_type == 7: + * channel_format = 'utf-8' # <<<<<<<<<<<<<< + * elif signal_data_type == 8: + * channel_format = ' max_len: + * max_len = VLSDLen[rec] + * if max_len != 0: # <<<<<<<<<<<<<< + * if signal_data_type < 10 or signal_data_type == 17: + * if signal_data_type == 6: + */ + } + + /* "dataRead.pyx":1519 + * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) + * else: + * printf('VLSD channel could not be properly read\n') # <<<<<<<<<<<<<< + * return None + * finally: + */ + /*else*/ { + (void)(printf(((char const *)"VLSD channel could not be properly read\n"))); + + /* "dataRead.pyx":1520 + * else: + * printf('VLSD channel could not be properly read\n') + * return None # <<<<<<<<<<<<<< + * finally: + * PyMem_Free(pointer) + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L6_return; + } + } + + /* "dataRead.pyx":1522 + * return None + * finally: + * PyMem_Free(pointer) # <<<<<<<<<<<<<< + * PyMem_Free(VLSDLen) + * + */ + /*finally:*/ { + __pyx_L7_error:; + /*exception exit:*/{ + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; + __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; + if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); + if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_9); + __Pyx_XGOTREF(__pyx_t_10); + __Pyx_XGOTREF(__pyx_t_11); + __Pyx_XGOTREF(__pyx_t_12); + __Pyx_XGOTREF(__pyx_t_13); + __Pyx_XGOTREF(__pyx_t_14); + __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename; + { + PyMem_Free(__pyx_v_pointer); + + /* "dataRead.pyx":1523 + * finally: + * PyMem_Free(pointer) + * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< + * + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + */ + PyMem_Free(__pyx_v_VLSDLen); + } + if (PY_MAJOR_VERSION >= 3) { + __Pyx_XGIVEREF(__pyx_t_12); + __Pyx_XGIVEREF(__pyx_t_13); + __Pyx_XGIVEREF(__pyx_t_14); + __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); + } + __Pyx_XGIVEREF(__pyx_t_9); + __Pyx_XGIVEREF(__pyx_t_10); + __Pyx_XGIVEREF(__pyx_t_11); + __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11); + __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; + __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8; + goto __pyx_L1_error; + } + __pyx_L6_return: { + __pyx_t_14 = __pyx_r; + __pyx_r = 0; + + /* "dataRead.pyx":1522 + * return None + * finally: + * PyMem_Free(pointer) # <<<<<<<<<<<<<< + * PyMem_Free(VLSDLen) + * + */ + PyMem_Free(__pyx_v_pointer); + + /* "dataRead.pyx":1523 + * finally: + * PyMem_Free(pointer) + * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< + * + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + */ + PyMem_Free(__pyx_v_VLSDLen); + __pyx_r = __pyx_t_14; + __pyx_t_14 = 0; + goto __pyx_L0; + } + } + + /* "dataRead.pyx":1458 + * + * + * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< + * unsigned long long sd_block_length, unsigned long long n_records): + * """ Reads vlsd channel from its SD Block bytes + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("dataRead.sd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_channel_format); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":1525 + * PyMem_Free(VLSDLen) + * + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const *__pyx_v_bit_stream, unsigned PY_LONG_LONG *__pyx_v_pointer, unsigned long *__pyx_v_VLSDLen, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records) { + PyArrayObject *__pyx_v_output = 0; + unsigned long __pyx_v_rec; + 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; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("equalize_byte_length", 1); + + /* "dataRead.pyx":1527 + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + * unsigned long max_len, unsigned long long n_records): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< + * cdef unsigned long rec = 0 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1527, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "dataRead.pyx":1528 + * unsigned long max_len, unsigned long long n_records): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') + */ + __pyx_v_rec = 0; + + /* "dataRead.pyx":1529 + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + * cdef unsigned long rec = 0 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< + * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') + * return output + */ + __pyx_t_9 = __pyx_v_n_records; + for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_9; __pyx_v_rec+=1) { + + /* "dataRead.pyx":1530 + * cdef unsigned long rec = 0 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< + * return output + * + */ + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_kp_b__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_4, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1530, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + + /* "dataRead.pyx":1531 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') + * return output # <<<<<<<<<<<<<< + * + * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_output); + __pyx_r = ((PyObject *)__pyx_v_output); + goto __pyx_L0; + + /* "dataRead.pyx":1525 + * PyMem_Free(VLSDLen) + * + * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) + */ + + /* 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_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dataRead.equalize_byte_length", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":1533 + * return output + * + * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records, channel_format): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char const *__pyx_v_bit_stream, unsigned PY_LONG_LONG *__pyx_v_pointer, unsigned long *__pyx_v_VLSDLen, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records, PyObject *__pyx_v_channel_format) { + PyArrayObject *__pyx_v_output = 0; + unsigned long __pyx_v_rec; + PyObject *__pyx_v_raw = 0; + 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; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + Py_ssize_t __pyx_t_11; + int __pyx_t_12; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("equalize_string_length", 1); + + /* "dataRead.pyx":1535 + * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, + * unsigned long max_len, unsigned long long n_records, channel_format): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< + * cdef unsigned long rec = 0 + * cdef bytes raw + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1535, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1535, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "dataRead.pyx":1536 + * unsigned long max_len, unsigned long long n_records, channel_format): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) + * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< + * cdef bytes raw + * if channel_format == 'bom': + */ + __pyx_v_rec = 0; + + /* "dataRead.pyx":1538 + * cdef unsigned long rec = 0 + * cdef bytes raw + * if channel_format == 'bom': # <<<<<<<<<<<<<< + * # signal_data_type 17: detect BOM per value + * for rec from 0 <= rec < n_records by 1: + */ + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_channel_format, __pyx_n_u_bom, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1538, __pyx_L1_error) + if (__pyx_t_9) { + + /* "dataRead.pyx":1540 + * if channel_format == 'bom': + * # signal_data_type 17: detect BOM per value + * for rec from 0 <= rec < n_records by 1: # <<<<<<<<<<<<<< + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + */ + __pyx_t_10 = __pyx_v_n_records; + for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_10; __pyx_v_rec+=1) { + + /* "dataRead.pyx":1541 + * # signal_data_type 17: detect BOM per value + * for rec from 0 <= rec < n_records by 1: + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) # <<<<<<<<<<<<<< + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1541, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1541, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_raw, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "dataRead.pyx":1542 + * for rec from 0 <= rec < n_records by 1: + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + */ + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1542, __pyx_L1_error) + __pyx_t_12 = (__pyx_t_11 >= 3); + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L7_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1542, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1542, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __pyx_t_12; + __pyx_L7_bool_binop_done:; + if (__pyx_t_9) { + + /* "dataRead.pyx":1543 + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1543, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1543, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1543, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dataRead.pyx":1542 + * for rec from 0 <= rec < n_records by 1: + * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + */ + goto __pyx_L6; + } + + /* "dataRead.pyx":1544 + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + */ + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1544, __pyx_L1_error) + __pyx_t_12 = (__pyx_t_11 >= 2); + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1544, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1544, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L11_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1544, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1544, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __pyx_t_12; + __pyx_L11_bool_binop_done:; + if (__pyx_t_9) { + + /* "dataRead.pyx":1545 + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1545, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1545, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1545, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1545, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1545, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1545, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1545, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dataRead.pyx":1544 + * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + */ + goto __pyx_L6; + } + + /* "dataRead.pyx":1546 + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: + */ + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1546, __pyx_L1_error) + __pyx_t_12 = (__pyx_t_11 >= 2); + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1546, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_12) { + } else { + __pyx_t_9 = __pyx_t_12; + goto __pyx_L14_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1546, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_9 = __pyx_t_12; + __pyx_L14_bool_binop_done:; + if (__pyx_t_9) { + + /* "dataRead.pyx":1547 + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif len(raw) > 0: + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1547, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1547, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1547, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1547, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1547, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1547, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1547, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1547, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dataRead.pyx":1546 + * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: + */ + goto __pyx_L6; + } + + /* "dataRead.pyx":1548 + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: # <<<<<<<<<<<<<< + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + * else: + */ + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1548, __pyx_L1_error) + __pyx_t_9 = (__pyx_t_11 > 0); + if (__pyx_t_9) { + + /* "dataRead.pyx":1549 + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * else: + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1549, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(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_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1549, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dataRead.pyx":1548 + * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif len(raw) > 0: # <<<<<<<<<<<<<< + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + * else: + */ + } + __pyx_L6:; + } + + /* "dataRead.pyx":1538 + * cdef unsigned long rec = 0 + * cdef bytes raw + * if channel_format == 'bom': # <<<<<<<<<<<<<< + * # signal_data_type 17: detect BOM per value + * for rec from 0 <= rec < n_records by 1: + */ + goto __pyx_L3; + } + + /* "dataRead.pyx":1551 + * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') + * else: + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< + * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') + * return output + */ + /*else*/ { + __pyx_t_10 = __pyx_v_n_records; + for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_10; __pyx_v_rec+=1) { + + /* "dataRead.pyx":1552 + * else: + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') # <<<<<<<<<<<<<< + * return output + * + */ + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_channel_format}; + __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1552, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + } + __pyx_L3:; + + /* "dataRead.pyx":1553 + * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain + * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') + * return output # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_output); + __pyx_r = ((PyObject *)__pyx_v_output); + goto __pyx_L0; + + /* "dataRead.pyx":1533 + * return output + * + * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records, channel_format): + * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) + */ + + /* 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_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dataRead.equalize_string_length", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XDECREF(__pyx_v_raw); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":1556 + * + * + * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< + * object offsets_array, object sizes_array, + * unsigned long long n_records): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_9vd_data_read(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +PyDoc_STRVAR(__pyx_doc_8dataRead_8vd_data_read, "Read VLSC channel data from raw VD block bytes.\n\n Parameters\n ----------------\n signal_data_type : int\n signal data type (6=ISO-8859-1, 7=UTF-8, 8=UTF-16-LE, 9=UTF-16-BE,\n 17=BOM, 10+=byte array)\n vd_block : bytes\n raw VD block data (no per-value length prefix, unlike SD blocks)\n offsets_array : numpy uint64 array\n byte offset of each value within vd_block\n sizes_array : numpy uint64 array\n byte size of each value\n n_records : int\n number of records\n\n Returns\n -------\n numpy array of decoded strings (dtype U...) or byte arrays (dtype V...)\n "); +static PyMethodDef __pyx_mdef_8dataRead_9vd_data_read = {"vd_data_read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_9vd_data_read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_8vd_data_read}; +static PyObject *__pyx_pw_8dataRead_9vd_data_read(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + unsigned short __pyx_v_signal_data_type; + PyObject *__pyx_v_vd_block = 0; + PyObject *__pyx_v_offsets_array = 0; + PyObject *__pyx_v_sizes_array = 0; + unsigned PY_LONG_LONG __pyx_v_n_records; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[5] = {0,0,0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("vd_data_read (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_signal_data_type,&__pyx_n_s_vd_block,&__pyx_n_s_offsets_array,&__pyx_n_s_sizes_array,&__pyx_n_s_n_records,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 5: values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_signal_data_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_vd_block)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 1); __PYX_ERR(0, 1556, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_offsets_array)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 2); __PYX_ERR(0, 1556, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 3: + if (likely((values[3] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_sizes_array)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 3); __PYX_ERR(0, 1556, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 4: + if (likely((values[4] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_n_records)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 4); __PYX_ERR(0, 1556, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "vd_data_read") < 0)) __PYX_ERR(0, 1556, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 5)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); + values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); + } + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + __pyx_v_vd_block = ((PyObject*)values[1]); + __pyx_v_offsets_array = values[2]; + __pyx_v_sizes_array = values[3]; + __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1558, __pyx_L3_error) + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1556, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.vd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vd_block), (&PyBytes_Type), 1, "vd_block", 1))) __PYX_ERR(0, 1556, __pyx_L1_error) + __pyx_r = __pyx_pf_8dataRead_8vd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_vd_block, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_n_records); + + /* function exit code */ + goto __pyx_L0; + __pyx_L1_error:; + __pyx_r = NULL; + __pyx_L0:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_self, unsigned short __pyx_v_signal_data_type, PyObject *__pyx_v_vd_block, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned PY_LONG_LONG __pyx_v_n_records) { + char const *__pyx_v_bit_stream; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned PY_LONG_LONG __pyx_v_size; + unsigned long __pyx_v_max_len; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + char *__pyx_t_1; + unsigned PY_LONG_LONG __pyx_t_2; + unsigned PY_LONG_LONG __pyx_t_3; + unsigned PY_LONG_LONG __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + unsigned PY_LONG_LONG __pyx_t_6; + int __pyx_t_7; + int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("vd_data_read", 1); + + /* "dataRead.pyx":1579 + * numpy array of decoded strings (dtype U...) or byte arrays (dtype V...) + * """ + * cdef const char* bit_stream = PyBytes_AsString(vd_block) # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long long offset, size + */ + __pyx_t_1 = PyBytes_AsString(__pyx_v_vd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1579, __pyx_L1_error) + __pyx_v_bit_stream = __pyx_t_1; + + /* "dataRead.pyx":1582 + * cdef unsigned long long i + * cdef unsigned long long offset, size + * cdef unsigned long max_len = 0 # <<<<<<<<<<<<<< + * + * # Find max_len from sizes + */ + __pyx_v_max_len = 0; + + /* "dataRead.pyx":1585 + * + * # Find max_len from sizes + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > max_len: + */ + __pyx_t_2 = __pyx_v_n_records; + __pyx_t_3 = __pyx_t_2; + for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { + __pyx_v_i = __pyx_t_4; + + /* "dataRead.pyx":1586 + * # Find max_len from sizes + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > max_len: + * max_len = size + */ + __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1586, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_5); if (unlikely((__pyx_t_6 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1586, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_size = ((unsigned PY_LONG_LONG)__pyx_t_6); + + /* "dataRead.pyx":1587 + * for i in range(n_records): + * size = sizes_array[i] + * if size > max_len: # <<<<<<<<<<<<<< + * max_len = size + * + */ + __pyx_t_7 = (__pyx_v_size > __pyx_v_max_len); + if (__pyx_t_7) { + + /* "dataRead.pyx":1588 + * size = sizes_array[i] + * if size > max_len: + * max_len = size # <<<<<<<<<<<<<< + * + * if max_len == 0: + */ + __pyx_v_max_len = ((unsigned long)__pyx_v_size); + + /* "dataRead.pyx":1587 + * for i in range(n_records): + * size = sizes_array[i] + * if size > max_len: # <<<<<<<<<<<<<< + * max_len = size + * + */ + } + } + + /* "dataRead.pyx":1590 + * max_len = size + * + * if max_len == 0: # <<<<<<<<<<<<<< + * return None + * + */ + __pyx_t_7 = (__pyx_v_max_len == 0); + if (__pyx_t_7) { + + /* "dataRead.pyx":1591 + * + * if max_len == 0: + * return None # <<<<<<<<<<<<<< + * + * if signal_data_type < 10 or signal_data_type == 17: + */ + __Pyx_XDECREF(__pyx_r); + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + + /* "dataRead.pyx":1590 + * max_len = size + * + * if max_len == 0: # <<<<<<<<<<<<<< + * return None + * + */ + } + + /* "dataRead.pyx":1593 + * return None + * + * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< + * return vd_equalize_string(bit_stream, offsets_array, sizes_array, + * max_len, n_records, signal_data_type) + */ + __pyx_t_8 = (__pyx_v_signal_data_type < 10); + if (!__pyx_t_8) { + } else { + __pyx_t_7 = __pyx_t_8; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_8 = (__pyx_v_signal_data_type == 17); + __pyx_t_7 = __pyx_t_8; + __pyx_L8_bool_binop_done:; + if (__pyx_t_7) { + + /* "dataRead.pyx":1594 + * + * if signal_data_type < 10 or signal_data_type == 17: + * return vd_equalize_string(bit_stream, offsets_array, sizes_array, # <<<<<<<<<<<<<< + * max_len, n_records, signal_data_type) + * else: + */ + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":1595 + * if signal_data_type < 10 or signal_data_type == 17: + * return vd_equalize_string(bit_stream, offsets_array, sizes_array, + * max_len, n_records, signal_data_type) # <<<<<<<<<<<<<< + * else: + * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, + */ + __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_string(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records, __pyx_v_signal_data_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1594, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + + /* "dataRead.pyx":1593 + * return None + * + * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< + * return vd_equalize_string(bit_stream, offsets_array, sizes_array, + * max_len, n_records, signal_data_type) + */ + } + + /* "dataRead.pyx":1597 + * max_len, n_records, signal_data_type) + * else: + * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, # <<<<<<<<<<<<<< + * max_len, n_records) + * + */ + /*else*/ { + __Pyx_XDECREF(__pyx_r); + + /* "dataRead.pyx":1598 + * else: + * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, + * max_len, n_records) # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_bytes(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1597, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_r = __pyx_t_5; + __pyx_t_5 = 0; + goto __pyx_L0; + } + + /* "dataRead.pyx":1556 + * + * + * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< + * object offsets_array, object sizes_array, + * unsigned long long n_records): + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("dataRead.vd_data_read", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":1601 + * + * + * cdef inline vd_equalize_string(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records, + * unsigned short signal_data_type): + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const *__pyx_v_bit_stream, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records, unsigned short __pyx_v_signal_data_type) { + PyArrayObject *__pyx_v_output = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned PY_LONG_LONG __pyx_v_offset; + unsigned long __pyx_v_size; + PyObject *__pyx_v_raw = 0; + 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; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned PY_LONG_LONG __pyx_t_11; + unsigned long __pyx_t_12; + int __pyx_t_13; + unsigned PY_LONG_LONG __pyx_t_14; + int __pyx_t_15; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("vd_equalize_string", 1); + + /* "dataRead.pyx":1605 + * unsigned short signal_data_type): + * """Decode string values from VD block using offset/size pairs.""" + * cdef np.ndarray output = np.zeros((n_records,), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long long offset + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1605, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "dataRead.pyx":1610 + * cdef unsigned long size + * cdef bytes raw + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] + */ + switch (__pyx_v_signal_data_type) { + case 6: + + /* "dataRead.pyx":1611 + * cdef bytes raw + * if signal_data_type == 6: + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1612 + * if signal_data_type == 6: + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1612, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1612, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1613 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1614 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + * elif signal_data_type == 7: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1614, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1614, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + + /* "dataRead.pyx":1615 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 7: + * for i in range(n_records): + */ + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1615, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1615, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__17, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1615, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1615, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1615, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1613 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + */ + } + } + + /* "dataRead.pyx":1610 + * cdef unsigned long size + * cdef bytes raw + * if signal_data_type == 6: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] + */ + break; + case 7: + + /* "dataRead.pyx":1617 + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + * elif signal_data_type == 7: + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1618 + * elif signal_data_type == 7: + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1618, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1619 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1620 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + * elif signal_data_type == 8: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1620, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1620, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + + /* "dataRead.pyx":1621 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 8: + * for i in range(n_records): + */ + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1621, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__14, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1621, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1621, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1619 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + */ + } + } + + /* "dataRead.pyx":1616 + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') + * elif signal_data_type == 7: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] + */ + break; + case 8: + + /* "dataRead.pyx":1623 + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + * elif signal_data_type == 8: + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1624 + * elif signal_data_type == 8: + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1624, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1624, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1625 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1626 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif signal_data_type == 9: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1626, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1626, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + + /* "dataRead.pyx":1627 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 9: + * for i in range(n_records): + */ + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1627, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__15, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1627, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1627, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1625 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + */ + } + } + + /* "dataRead.pyx":1622 + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') + * elif signal_data_type == 8: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] + */ + break; + case 9: + + /* "dataRead.pyx":1629 + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif signal_data_type == 9: + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1630 + * elif signal_data_type == 9: + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1630, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1630, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1631 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1632 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif signal_data_type == 17: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1632, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1632, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + + /* "dataRead.pyx":1633 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif signal_data_type == 17: + * # BOM-per-value: detect encoding from BOM bytes + */ + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1633, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__16, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1633, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1631 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + */ + } + } + + /* "dataRead.pyx":1628 + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif signal_data_type == 9: # <<<<<<<<<<<<<< + * for i in range(n_records): + * size = sizes_array[i] + */ + break; + case 17: + + /* "dataRead.pyx":1636 + * elif signal_data_type == 17: + * # BOM-per-value: detect encoding from BOM bytes + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1637 + * # BOM-per-value: detect encoding from BOM bytes + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1637, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1637, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1638 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1639 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * raw = bytes(bit_stream[offset:offset+size]) + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1639, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1639, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + + /* "dataRead.pyx":1640 + * if size > 0: + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) # <<<<<<<<<<<<<< + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1640, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1640, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_XDECREF_SET(__pyx_v_raw, ((PyObject*)__pyx_t_3)); + __pyx_t_3 = 0; + + /* "dataRead.pyx":1641 + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + */ + __pyx_t_15 = (__pyx_v_size >= 3); + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1641, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1641, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L19_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1641, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1641, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_t_15; + __pyx_L19_bool_binop_done:; + if (__pyx_t_13) { + + /* "dataRead.pyx":1642 + * raw = bytes(bit_stream[offset:offset+size]) + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1642, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1642, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1642, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1642, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1642, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1642, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1642, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1642, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dataRead.pyx":1641 + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + */ + goto __pyx_L18; + } + + /* "dataRead.pyx":1643 + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + */ + __pyx_t_15 = (__pyx_v_size >= 2); + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L23_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1643, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L23_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1643, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1643, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_t_15; + __pyx_L23_bool_binop_done:; + if (__pyx_t_13) { + + /* "dataRead.pyx":1644 + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1644, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1644, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1644, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1644, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dataRead.pyx":1643 + * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: + * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + */ + goto __pyx_L18; + } + + /* "dataRead.pyx":1645 + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * else: + */ + __pyx_t_15 = (__pyx_v_size >= 2); + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L26_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1645, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_15) { + } else { + __pyx_t_13 = __pyx_t_15; + goto __pyx_L26_bool_binop_done; + } + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1645, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1645, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_13 = __pyx_t_15; + __pyx_L26_bool_binop_done:; + if (__pyx_t_13) { + + /* "dataRead.pyx":1646 + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * else: + * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') + */ + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1646, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1646, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_4))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_4, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1646, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1646, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "dataRead.pyx":1645 + * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: + * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') + * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * else: + */ + goto __pyx_L18; + } + + /* "dataRead.pyx":1648 + * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') + * else: + * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< + * return output + * + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1648, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1648, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1648, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1648, __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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1648, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(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_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1648, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1648, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_L18:; + + /* "dataRead.pyx":1638 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * raw = bytes(bit_stream[offset:offset+size]) + */ + } + } + + /* "dataRead.pyx":1634 + * offset = offsets_array[i] + * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') + * elif signal_data_type == 17: # <<<<<<<<<<<<<< + * # BOM-per-value: detect encoding from BOM bytes + * for i in range(n_records): + */ + break; + default: break; + } + + /* "dataRead.pyx":1649 + * else: + * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') + * return output # <<<<<<<<<<<<<< + * + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_output); + __pyx_r = ((PyObject *)__pyx_v_output); + goto __pyx_L0; + + /* "dataRead.pyx":1601 + * + * + * cdef inline vd_equalize_string(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records, + * unsigned short signal_data_type): + */ + + /* 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_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dataRead.vd_equalize_string", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XDECREF(__pyx_v_raw); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "dataRead.pyx":1652 + * + * + * cdef inline vd_equalize_bytes(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records): + * """Return byte-array values from VD block using offset/size pairs.""" + */ + +static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *__pyx_v_bit_stream, PyObject *__pyx_v_offsets_array, PyObject *__pyx_v_sizes_array, unsigned long __pyx_v_max_len, unsigned PY_LONG_LONG __pyx_v_n_records) { + PyArrayObject *__pyx_v_output = 0; + unsigned PY_LONG_LONG __pyx_v_i; + unsigned PY_LONG_LONG __pyx_v_offset; + unsigned long __pyx_v_size; + 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; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + unsigned PY_LONG_LONG __pyx_t_9; + unsigned PY_LONG_LONG __pyx_t_10; + unsigned PY_LONG_LONG __pyx_t_11; + unsigned long __pyx_t_12; + int __pyx_t_13; + unsigned PY_LONG_LONG __pyx_t_14; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("vd_equalize_bytes", 1); + + /* "dataRead.pyx":1655 + * unsigned long max_len, unsigned long long n_records): + * """Return byte-array values from VD block using offset/size pairs.""" + * cdef np.ndarray output = np.zeros((n_records,), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< + * cdef unsigned long long i + * cdef unsigned long long offset + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error); + __pyx_t_1 = 0; + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1655, __pyx_L1_error); + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_5))) { + __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); + if (likely(__pyx_t_7)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); + __Pyx_INCREF(__pyx_t_7); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_5, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1655, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_v_output = ((PyArrayObject *)__pyx_t_4); + __pyx_t_4 = 0; + + /* "dataRead.pyx":1659 + * cdef unsigned long long offset + * cdef unsigned long size + * for i in range(n_records): # <<<<<<<<<<<<<< + * size = sizes_array[i] + * if size > 0: + */ + __pyx_t_9 = __pyx_v_n_records; + __pyx_t_10 = __pyx_t_9; + for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { + __pyx_v_i = __pyx_t_11; + + /* "dataRead.pyx":1660 + * cdef unsigned long size + * for i in range(n_records): + * size = sizes_array[i] # <<<<<<<<<<<<<< + * if size > 0: + * offset = offsets_array[i] + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1660, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1660, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_size = ((unsigned long)__pyx_t_12); + + /* "dataRead.pyx":1661 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + */ + __pyx_t_13 = (__pyx_v_size > 0); + if (__pyx_t_13) { + + /* "dataRead.pyx":1662 + * size = sizes_array[i] + * if size > 0: + * offset = offsets_array[i] # <<<<<<<<<<<<<< + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + * return output + */ + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1662, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1662, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); + + /* "dataRead.pyx":1663 + * if size > 0: + * offset = offsets_array[i] + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< + * return output + */ + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_1, __pyx_kp_b__13}; + __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1663, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1663, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":1661 + * for i in range(n_records): + * size = sizes_array[i] + * if size > 0: # <<<<<<<<<<<<<< + * offset = offsets_array[i] + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + */ + } + } + + /* "dataRead.pyx":1664 + * offset = offsets_array[i] + * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') + * return output # <<<<<<<<<<<<<< + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF((PyObject *)__pyx_v_output); + __pyx_r = ((PyObject *)__pyx_v_output); + goto __pyx_L0; + + /* "dataRead.pyx":1652 + * + * + * cdef inline vd_equalize_bytes(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< + * unsigned long max_len, unsigned long long n_records): + * """Return byte-array values from VD block using offset/size pairs.""" + */ + + /* 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_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dataRead.vd_equalize_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_output); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":1 + * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_8dataRead_11__pyx_unpickle_SymBufReader(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +); /*proto*/ +static PyMethodDef __pyx_mdef_8dataRead_11__pyx_unpickle_SymBufReader = {"__pyx_unpickle_SymBufReader", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_11__pyx_unpickle_SymBufReader, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_8dataRead_11__pyx_unpickle_SymBufReader(PyObject *__pyx_self, +#if CYTHON_METH_FASTCALL +PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds +#else +PyObject *__pyx_args, PyObject *__pyx_kwds +#endif +) { + PyObject *__pyx_v___pyx_type = 0; + long __pyx_v___pyx_checksum; + PyObject *__pyx_v___pyx_state = 0; + #if !CYTHON_METH_FASTCALL + CYTHON_UNUSED Py_ssize_t __pyx_nargs; + #endif + CYTHON_UNUSED PyObject *const *__pyx_kwvalues; + PyObject* values[3] = {0,0,0}; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader (wrapper)", 0); + #if !CYTHON_METH_FASTCALL + #if CYTHON_ASSUME_SAFE_MACROS + __pyx_nargs = PyTuple_GET_SIZE(__pyx_args); + #else + __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL; + #endif + #endif + __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs); + { + PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; + if (__pyx_kwds) { + Py_ssize_t kw_args; + switch (__pyx_nargs) { + case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds); + switch (__pyx_nargs) { + case 0: + if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) { + (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); + kw_args--; + } + else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + else { + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + const Py_ssize_t kwd_pos_args = __pyx_nargs; + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_SymBufReader") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) + } + } else if (unlikely(__pyx_nargs != 3)) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0); + values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1); + values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); + } + __pyx_v___pyx_type = values[0]; + __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_v___pyx_state = values[2]; + } + goto __pyx_L6_skip; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_SymBufReader", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error) + __pyx_L6_skip:; + goto __pyx_L4_argument_unpacking_done; + __pyx_L3_error:; + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_AddTraceback("dataRead.__pyx_unpickle_SymBufReader", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_8dataRead_10__pyx_unpickle_SymBufReader(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); + + /* function exit code */ + { + Py_ssize_t __pyx_temp; + for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) { + __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]); + } + } + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_8dataRead_10__pyx_unpickle_SymBufReader(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_v___pyx_PickleError = 0; + PyObject *__pyx_v___pyx_result = 0; + 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; + unsigned int __pyx_t_5; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader", 1); + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + */ + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__18, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "(tree fragment)":5 + * cdef object __pyx_result + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): + * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + * __pyx_result = SymBufReader.__new__(__pyx_type) + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_PickleError); + __Pyx_GIVEREF(__pyx_n_s_PickleError); + if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_t_1); + __pyx_v___pyx_PickleError = __pyx_t_1; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":6 + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum # <<<<<<<<<<<<<< + * __pyx_result = SymBufReader.__new__(__pyx_type) + * if __pyx_state is not None: + */ + __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(1, 6, __pyx_L1_error) + + /* "(tree fragment)":4 + * cdef object __pyx_PickleError + * cdef object __pyx_result + * if __pyx_checksum not in (0x350e66f, 0x734868b, 0xcff8329): # <<<<<<<<<<<<<< + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + */ + } + + /* "(tree fragment)":7 + * from pickle import PickleError as __pyx_PickleError + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + * __pyx_result = SymBufReader.__new__(__pyx_type) # <<<<<<<<<<<<<< + * if __pyx_state is not None: + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_8dataRead_SymBufReader), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_3))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_3, function); + __pyx_t_5 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type}; + __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5); + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } + __pyx_v___pyx_result = __pyx_t_1; + __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + * __pyx_result = SymBufReader.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + __pyx_t_2 = (__pyx_v___pyx_state != Py_None); + if (__pyx_t_2) { + + /* "(tree fragment)":9 + * __pyx_result = SymBufReader.__new__(__pyx_type) + * if __pyx_state is not None: + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< + * return __pyx_result + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + */ + if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error) + __pyx_t_1 = __pyx_f_8dataRead___pyx_unpickle_SymBufReader__set_state(((struct __pyx_obj_8dataRead_SymBufReader *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "(tree fragment)":8 + * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x350e66f, 0x734868b, 0xcff8329) = (_buf, _buf_len, _buf_start, _fid, _pos))" % __pyx_checksum + * __pyx_result = SymBufReader.__new__(__pyx_type) + * if __pyx_state is not None: # <<<<<<<<<<<<<< + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result + */ + } + + /* "(tree fragment)":10 + * if __pyx_state is not None: + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result # <<<<<<<<<<<<<< + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v___pyx_result); + __pyx_r = __pyx_v___pyx_result; + goto __pyx_L0; + + /* "(tree fragment)":1 + * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< + * cdef object __pyx_PickleError + * cdef object __pyx_result + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("dataRead.__pyx_unpickle_SymBufReader", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v___pyx_PickleError); + __Pyx_XDECREF(__pyx_v___pyx_result); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "(tree fragment)":11 + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): + */ + +static PyObject *__pyx_f_8dataRead___pyx_unpickle_SymBufReader__set_state(struct __pyx_obj_8dataRead_SymBufReader *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + unsigned char __pyx_t_1[0x10000]; + Py_ssize_t __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + unsigned int __pyx_t_8; + int __pyx_lineno = 0; + const char *__pyx_filename = NULL; + int __pyx_clineno = 0; + __Pyx_RefNannySetupContext("__pyx_unpickle_SymBufReader__set_state", 1); + + /* "(tree fragment)":12 + * return __pyx_result + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] # <<<<<<<<<<<<<< + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[5]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + if (unlikely((__Pyx_carray_from_py_unsigned_char(PyTuple_GET_ITEM(__pyx_v___pyx_state, 0), __pyx_t_1, 0x10000) < 0))) __PYX_ERR(1, 12, __pyx_L1_error) + if (unlikely((0x10000) != (0x10000))) { + PyErr_Format(PyExc_ValueError, "Assignment to slice of wrong length, expected %" CYTHON_FORMAT_SSIZE_T "d, got %" CYTHON_FORMAT_SSIZE_T "d", (Py_ssize_t)(0x10000), (Py_ssize_t)(0x10000)); + __PYX_ERR(1, 12, __pyx_L1_error) + } + memcpy(&(__pyx_v___pyx_result->_buf[0]), __pyx_t_1, sizeof(__pyx_v___pyx_result->_buf[0]) * (0x10000)); + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 1)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_v___pyx_result->_buf_len = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 2)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_v___pyx_result->_buf_start = __pyx_t_2; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_3 = PyTuple_GET_ITEM(__pyx_v___pyx_state, 3); + __Pyx_INCREF(__pyx_t_3); + __Pyx_GIVEREF(__pyx_t_3); + __Pyx_GOTREF(__pyx_v___pyx_result->_fid); + __Pyx_DECREF(__pyx_v___pyx_result->_fid); + __pyx_v___pyx_result->_fid = __pyx_t_3; + __pyx_t_3 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 12, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(PyTuple_GET_ITEM(__pyx_v___pyx_state, 4)); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) + __pyx_v___pyx_result->_pos = __pyx_t_2; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[5]) + */ + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); + __PYX_ERR(1, 13, __pyx_L1_error) + } + __pyx_t_2 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_5 = (__pyx_t_2 > 5); + if (__pyx_t_5) { + } else { + __pyx_t_4 = __pyx_t_5; + goto __pyx_L4_bool_binop_done; + } + __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) + __pyx_t_4 = __pyx_t_5; + __pyx_L4_bool_binop_done:; + if (__pyx_t_4) { + + /* "(tree fragment)":14 + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): + * __pyx_result.__dict__.update(__pyx_state[5]) # <<<<<<<<<<<<<< + */ + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(__pyx_v___pyx_state == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(1, 14, __pyx_L1_error) + } + __pyx_t_6 = NULL; + __pyx_t_8 = 0; + #if CYTHON_UNPACK_METHODS + if (likely(PyMethod_Check(__pyx_t_7))) { + __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7); + if (likely(__pyx_t_6)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); + __Pyx_INCREF(__pyx_t_6); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_7, function); + __pyx_t_8 = 1; + } + } + #endif + { + PyObject *__pyx_callargs[2] = {__pyx_t_6, PyTuple_GET_ITEM(__pyx_v___pyx_state, 5)}; + __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); + __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; + if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; + } + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + + /* "(tree fragment)":13 + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< + * __pyx_result.__dict__.update(__pyx_state[5]) + */ + } + + /* "(tree fragment)":11 + * __pyx_unpickle_SymBufReader__set_state( __pyx_result, __pyx_state) + * return __pyx_result + * cdef __pyx_unpickle_SymBufReader__set_state(SymBufReader __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< + * __pyx_result._buf = __pyx_state[0]; __pyx_result._buf_len = __pyx_state[1]; __pyx_result._buf_start = __pyx_state[2]; __pyx_result._fid = __pyx_state[3]; __pyx_result._pos = __pyx_state[4] + * if len(__pyx_state) > 5 and hasattr(__pyx_result, '__dict__'): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_AddTraceback("dataRead.__pyx_unpickle_SymBufReader__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = 0; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} +static struct __pyx_vtabstruct_8dataRead_SymBufReader __pyx_vtable_8dataRead_SymBufReader; + +static PyObject *__pyx_tp_new_8dataRead_SymBufReader(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { + struct __pyx_obj_8dataRead_SymBufReader *p; + PyObject *o; + #if CYTHON_COMPILING_IN_LIMITED_API + allocfunc alloc_func = (allocfunc)PyType_GetSlot(t, Py_tp_alloc); + o = alloc_func(t, 0); + #else + if (likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) { + o = (*t->tp_alloc)(t, 0); + } else { + o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); + } + if (unlikely(!o)) return 0; + #endif + p = ((struct __pyx_obj_8dataRead_SymBufReader *)o); + p->__pyx_vtab = __pyx_vtabptr_8dataRead_SymBufReader; + p->_fid = Py_None; Py_INCREF(Py_None); + return o; +} + +static void __pyx_tp_dealloc_8dataRead_SymBufReader(PyObject *o) { + struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; + #if CYTHON_USE_TP_FINALIZE + if (unlikely((PY_VERSION_HEX >= 0x03080000 || __Pyx_PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE)) && __Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) { + if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_8dataRead_SymBufReader) { + if (PyObject_CallFinalizerFromDealloc(o)) return; + } + } + #endif + PyObject_GC_UnTrack(o); + Py_CLEAR(p->_fid); + #if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + (*Py_TYPE(o)->tp_free)(o); + #else + { + freefunc tp_free = (freefunc)PyType_GetSlot(Py_TYPE(o), Py_tp_free); + if (tp_free) tp_free(o); + } + #endif +} + +static int __pyx_tp_traverse_8dataRead_SymBufReader(PyObject *o, visitproc v, void *a) { + int e; + struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; + if (p->_fid) { + e = (*v)(p->_fid, a); if (e) return e; + } + return 0; +} + +static int __pyx_tp_clear_8dataRead_SymBufReader(PyObject *o) { + PyObject* tmp; + struct __pyx_obj_8dataRead_SymBufReader *p = (struct __pyx_obj_8dataRead_SymBufReader *)o; + tmp = ((PyObject*)p->_fid); + p->_fid = Py_None; Py_INCREF(Py_None); + Py_XDECREF(tmp); + return 0; +} + +static PyMethodDef __pyx_methods_8dataRead_SymBufReader[] = { + {"seek", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_3seek, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_12SymBufReader_2seek}, + {"tell", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_5tell, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"read", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_7read, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_8dataRead_12SymBufReader_6read}, + {"fileno", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_9fileno, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__reduce_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {"__setstate_cython__", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_8dataRead_12SymBufReader_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0}, + {0, 0, 0, 0} +}; +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_type_8dataRead_SymBufReader_slots[] = { + {Py_tp_dealloc, (void *)__pyx_tp_dealloc_8dataRead_SymBufReader}, + {Py_tp_doc, (void *)PyDoc_STR("Bidirectional-buffered wrapper around a Python file object.\n\n Drop-in replacement for any ``fid`` used in mdfreader metadata parsing:\n supports ``seek(pos[, whence])``, ``read([n])``, ``tell()``, ``fileno()``.\n ")}, + {Py_tp_traverse, (void *)__pyx_tp_traverse_8dataRead_SymBufReader}, + {Py_tp_clear, (void *)__pyx_tp_clear_8dataRead_SymBufReader}, + {Py_tp_methods, (void *)__pyx_methods_8dataRead_SymBufReader}, + {Py_tp_init, (void *)__pyx_pw_8dataRead_12SymBufReader_1__init__}, + {Py_tp_new, (void *)__pyx_tp_new_8dataRead_SymBufReader}, + {0, 0}, +}; +static PyType_Spec __pyx_type_8dataRead_SymBufReader_spec = { + "dataRead.SymBufReader", + sizeof(struct __pyx_obj_8dataRead_SymBufReader), + 0, + Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, __pyx_type_8dataRead_SymBufReader_slots, }; #else @@ -39602,21 +44567,33 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1}, {&__pyx_kp_s_All_dimensions_preceding_dimensi, __pyx_k_All_dimensions_preceding_dimensi, sizeof(__pyx_k_All_dimensions_preceding_dimensi), 0, 0, 1, 0}, {&__pyx_n_s_AssertionError, __pyx_k_AssertionError, sizeof(__pyx_k_AssertionError), 0, 0, 1, 1}, + {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, + {&__pyx_n_u_BUS, __pyx_k_BUS, sizeof(__pyx_k_BUS), 0, 1, 0, 1}, {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0}, {&__pyx_n_u_C, __pyx_k_C, sizeof(__pyx_k_C), 0, 1, 0, 1}, + {&__pyx_n_u_CAN, __pyx_k_CAN, sizeof(__pyx_k_CAN), 0, 1, 0, 1}, + {&__pyx_kp_b_CC, __pyx_k_CC, sizeof(__pyx_k_CC), 0, 0, 0, 0}, {&__pyx_n_s_CGrecordLength, __pyx_k_CGrecordLength, sizeof(__pyx_k_CGrecordLength), 0, 0, 1, 1}, + {&__pyx_kp_b_CN, __pyx_k_CN, sizeof(__pyx_k_CN), 0, 0, 0, 0}, + {&__pyx_n_s_CNcomment, __pyx_k_CNcomment, sizeof(__pyx_k_CNcomment), 0, 0, 1, 1}, + {&__pyx_n_s_CNunit, __pyx_k_CNunit, sizeof(__pyx_k_CNunit), 0, 0, 1, 1}, {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0}, {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0}, {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0}, {&__pyx_kp_u_Cannot_index_with_type, __pyx_k_Cannot_index_with_type, sizeof(__pyx_k_Cannot_index_with_type), 0, 1, 0, 0}, {&__pyx_kp_s_Cannot_transpose_memoryview_with, __pyx_k_Cannot_transpose_memoryview_with, sizeof(__pyx_k_Cannot_transpose_memoryview_with), 0, 0, 1, 0}, {&__pyx_n_s_Channel, __pyx_k_Channel, sizeof(__pyx_k_Channel), 0, 0, 1, 1}, + {&__pyx_n_u_Comment, __pyx_k_Comment, sizeof(__pyx_k_Comment), 0, 1, 0, 1}, {&__pyx_kp_s_Dimension_d_is_not_direct, __pyx_k_Dimension_d_is_not_direct, sizeof(__pyx_k_Dimension_d_is_not_direct), 0, 0, 1, 0}, + {&__pyx_n_u_ECU, __pyx_k_ECU, sizeof(__pyx_k_ECU), 0, 1, 0, 1}, + {&__pyx_n_u_ETHERNET, __pyx_k_ETHERNET, sizeof(__pyx_k_ETHERNET), 0, 1, 0, 1}, {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1}, {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0}, + {&__pyx_n_u_FLEXRAY, __pyx_k_FLEXRAY, sizeof(__pyx_k_FLEXRAY), 0, 1, 0, 1}, {&__pyx_n_s_Flags, __pyx_k_Flags, sizeof(__pyx_k_Flags), 0, 0, 1, 1}, {&__pyx_n_u_ISO8859, __pyx_k_ISO8859, sizeof(__pyx_k_ISO8859), 0, 1, 0, 1}, {&__pyx_kp_u_ISO_8859_1, __pyx_k_ISO_8859_1, sizeof(__pyx_k_ISO_8859_1), 0, 1, 0, 0}, + {&__pyx_kp_u_I_O, __pyx_k_I_O, sizeof(__pyx_k_I_O), 0, 1, 0, 0}, {&__pyx_n_s_ImportError, __pyx_k_ImportError, sizeof(__pyx_k_ImportError), 0, 0, 1, 1}, {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0}, {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0_2, __pyx_k_Incompatible_checksums_0x_x_vs_0_2, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0_2), 0, 0, 1, 0}, @@ -39625,14 +44602,23 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0}, {&__pyx_kp_u_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 1, 0, 0}, {&__pyx_kp_u_Invalid_shape_in_axis, __pyx_k_Invalid_shape_in_axis, sizeof(__pyx_k_Invalid_shape_in_axis), 0, 1, 0, 0}, + {&__pyx_n_u_K_LINE, __pyx_k_K_LINE, sizeof(__pyx_k_K_LINE), 0, 1, 0, 1}, + {&__pyx_n_u_LIN, __pyx_k_LIN, sizeof(__pyx_k_LIN), 0, 1, 0, 1}, + {&__pyx_n_u_MOST, __pyx_k_MOST, sizeof(__pyx_k_MOST), 0, 1, 0, 1}, {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0}, {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0}, + {&__pyx_n_u_NONE, __pyx_k_NONE, sizeof(__pyx_k_NONE), 0, 1, 0, 1}, {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1}, + {&__pyx_n_u_OTHER, __pyx_k_OTHER, sizeof(__pyx_k_OTHER), 0, 1, 0, 1}, {&__pyx_kp_u_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 1, 0, 0}, {&__pyx_n_s_OverflowError, __pyx_k_OverflowError, sizeof(__pyx_k_OverflowError), 0, 0, 1, 1}, {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, {&__pyx_n_u_S, __pyx_k_S, sizeof(__pyx_k_S), 0, 1, 0, 1}, + {&__pyx_kp_b_SI, __pyx_k_SI, sizeof(__pyx_k_SI), 0, 0, 0, 0}, + {&__pyx_n_u_SI_2, __pyx_k_SI_2, sizeof(__pyx_k_SI_2), 0, 1, 0, 1}, + {&__pyx_n_s_SI_BUS_MAP, __pyx_k_SI_BUS_MAP, sizeof(__pyx_k_SI_BUS_MAP), 0, 0, 1, 1}, + {&__pyx_n_s_SI_TYPE_MAP, __pyx_k_SI_TYPE_MAP, sizeof(__pyx_k_SI_TYPE_MAP), 0, 0, 1, 1}, {&__pyx_n_s_Sequence, __pyx_k_Sequence, sizeof(__pyx_k_Sequence), 0, 0, 1, 1}, {&__pyx_kp_s_Step_may_not_be_zero_axis_d, __pyx_k_Step_may_not_be_zero_axis_d, sizeof(__pyx_k_Step_may_not_be_zero_axis_d), 0, 0, 1, 0}, {&__pyx_n_s_SymBufReader, __pyx_k_SymBufReader, sizeof(__pyx_k_SymBufReader), 0, 0, 1, 1}, @@ -39642,8 +44628,14 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_SymBufReader_read, __pyx_k_SymBufReader_read, sizeof(__pyx_k_SymBufReader_read), 0, 0, 1, 1}, {&__pyx_n_s_SymBufReader_seek, __pyx_k_SymBufReader_seek, sizeof(__pyx_k_SymBufReader_seek), 0, 0, 1, 1}, {&__pyx_n_s_SymBufReader_tell, __pyx_k_SymBufReader_tell, sizeof(__pyx_k_SymBufReader_tell), 0, 0, 1, 1}, + {&__pyx_n_u_TOOL, __pyx_k_TOOL, sizeof(__pyx_k_TOOL), 0, 1, 0, 1}, + {&__pyx_kp_b_TX, __pyx_k_TX, sizeof(__pyx_k_TX), 0, 0, 0, 0}, + {&__pyx_kp_b_TX_2, __pyx_k_TX_2, sizeof(__pyx_k_TX_2), 0, 0, 0, 0}, + {&__pyx_n_s_TX_3, __pyx_k_TX_3, sizeof(__pyx_k_TX_3), 0, 0, 1, 1}, {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, {&__pyx_kp_u_U, __pyx_k_U, sizeof(__pyx_k_U), 0, 1, 0, 0}, + {&__pyx_n_u_USB, __pyx_k_USB, sizeof(__pyx_k_USB), 0, 1, 0, 1}, + {&__pyx_n_u_USER, __pyx_k_USER, sizeof(__pyx_k_USER), 0, 1, 0, 1}, {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0}, {&__pyx_n_u_V, __pyx_k_V, sizeof(__pyx_k_V), 0, 1, 0, 1}, {&__pyx_n_s_VLSD, __pyx_k_VLSD, sizeof(__pyx_k_VLSD), 0, 0, 1, 1}, @@ -39656,11 +44648,12 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1}, {&__pyx_kp_b__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 0, 0, 0}, + {&__pyx_kp_u__12, __pyx_k__12, sizeof(__pyx_k__12), 0, 1, 0, 0}, {&__pyx_kp_b__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 0, 0, 0}, {&__pyx_kp_u__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 1, 0, 0}, {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, {&__pyx_n_s__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 0, 1, 1}, - {&__pyx_n_s__51, __pyx_k__51, sizeof(__pyx_k__51), 0, 0, 1, 1}, + {&__pyx_n_s__53, __pyx_k__53, sizeof(__pyx_k__53), 0, 0, 1, 1}, {&__pyx_kp_u__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 1, 0, 0}, {&__pyx_kp_u__7, __pyx_k__7, sizeof(__pyx_k__7), 0, 1, 0, 0}, {&__pyx_n_s_abc, __pyx_k_abc, sizeof(__pyx_k_abc), 0, 0, 1, 1}, @@ -39686,15 +44679,65 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1}, {&__pyx_n_s_c_format_structure, __pyx_k_c_format_structure, sizeof(__pyx_k_c_format_structure), 0, 0, 1, 1}, + {&__pyx_n_u_cc_cc_inverse, __pyx_k_cc_cc_inverse, sizeof(__pyx_k_cc_cc_inverse), 0, 1, 0, 1}, + {&__pyx_n_s_cc_dat, __pyx_k_cc_dat, sizeof(__pyx_k_cc_dat), 0, 0, 1, 1}, + {&__pyx_n_s_cc_data_offset, __pyx_k_cc_data_offset, sizeof(__pyx_k_cc_data_offset), 0, 0, 1, 1}, + {&__pyx_n_s_cc_dict, __pyx_k_cc_dict, sizeof(__pyx_k_cc_dict), 0, 0, 1, 1}, + {&__pyx_n_u_cc_flags, __pyx_k_cc_flags, sizeof(__pyx_k_cc_flags), 0, 1, 0, 1}, + {&__pyx_n_s_cc_hdr, __pyx_k_cc_hdr, sizeof(__pyx_k_cc_hdr), 0, 0, 1, 1}, + {&__pyx_n_u_cc_md_comment, __pyx_k_cc_md_comment, sizeof(__pyx_k_cc_md_comment), 0, 1, 0, 1}, + {&__pyx_n_u_cc_md_unit, __pyx_k_cc_md_unit, sizeof(__pyx_k_cc_md_unit), 0, 1, 0, 1}, + {&__pyx_n_u_cc_phy_range_max, __pyx_k_cc_phy_range_max, sizeof(__pyx_k_cc_phy_range_max), 0, 1, 0, 1}, + {&__pyx_n_u_cc_phy_range_min, __pyx_k_cc_phy_range_min, sizeof(__pyx_k_cc_phy_range_min), 0, 1, 0, 1}, + {&__pyx_n_u_cc_precision, __pyx_k_cc_precision, sizeof(__pyx_k_cc_precision), 0, 1, 0, 1}, + {&__pyx_n_s_cc_ptr, __pyx_k_cc_ptr, sizeof(__pyx_k_cc_ptr), 0, 0, 1, 1}, + {&__pyx_n_u_cc_ref_count, __pyx_k_cc_ref_count, sizeof(__pyx_k_cc_ref_count), 0, 1, 0, 1}, + {&__pyx_n_u_cc_tx_name, __pyx_k_cc_tx_name, sizeof(__pyx_k_cc_tx_name), 0, 1, 0, 1}, + {&__pyx_n_u_cc_type, __pyx_k_cc_type, sizeof(__pyx_k_cc_type), 0, 1, 0, 1}, + {&__pyx_n_u_cc_val, __pyx_k_cc_val, sizeof(__pyx_k_cc_val), 0, 1, 0, 1}, + {&__pyx_n_s_cc_val_buf, __pyx_k_cc_val_buf, sizeof(__pyx_k_cc_val_buf), 0, 0, 1, 1}, + {&__pyx_n_u_cc_val_count, __pyx_k_cc_val_count, sizeof(__pyx_k_cc_val_count), 0, 1, 0, 1}, + {&__pyx_n_s_cc_val_list, __pyx_k_cc_val_list, sizeof(__pyx_k_cc_val_list), 0, 0, 1, 1}, {&__pyx_n_u_channel, __pyx_k_channel, sizeof(__pyx_k_channel), 0, 1, 0, 1}, {&__pyx_n_u_channelName, __pyx_k_channelName, sizeof(__pyx_k_channelName), 0, 1, 0, 1}, {&__pyx_n_s_channelNames, __pyx_k_channelNames, sizeof(__pyx_k_channelNames), 0, 0, 1, 1}, {&__pyx_n_s_channel_format, __pyx_k_channel_format, sizeof(__pyx_k_channel_format), 0, 0, 1, 1}, {&__pyx_n_s_channel_name, __pyx_k_channel_name, sizeof(__pyx_k_channel_name), 0, 0, 1, 1}, + {&__pyx_n_s_channel_name_list, __pyx_k_channel_name_list, sizeof(__pyx_k_channel_name_list), 0, 0, 1, 1}, {&__pyx_n_s_channel_name_set, __pyx_k_channel_name_set, sizeof(__pyx_k_channel_name_set), 0, 0, 1, 1}, {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1}, {&__pyx_n_s_class_getitem, __pyx_k_class_getitem, sizeof(__pyx_k_class_getitem), 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_u_cn_at_reference, __pyx_k_cn_at_reference, sizeof(__pyx_k_cn_at_reference), 0, 1, 0, 1}, + {&__pyx_n_u_cn_attachment_count, __pyx_k_cn_attachment_count, sizeof(__pyx_k_cn_attachment_count), 0, 1, 0, 1}, + {&__pyx_n_u_cn_bit_count, __pyx_k_cn_bit_count, sizeof(__pyx_k_cn_bit_count), 0, 1, 0, 1}, + {&__pyx_n_u_cn_bit_offset, __pyx_k_cn_bit_offset, sizeof(__pyx_k_cn_bit_offset), 0, 1, 0, 1}, + {&__pyx_n_u_cn_byte_offset, __pyx_k_cn_byte_offset, sizeof(__pyx_k_cn_byte_offset), 0, 1, 0, 1}, + {&__pyx_n_u_cn_cc_conversion, __pyx_k_cn_cc_conversion, sizeof(__pyx_k_cn_cc_conversion), 0, 1, 0, 1}, + {&__pyx_n_u_cn_cn_next, __pyx_k_cn_cn_next, sizeof(__pyx_k_cn_cn_next), 0, 1, 0, 1}, + {&__pyx_n_u_cn_composition, __pyx_k_cn_composition, sizeof(__pyx_k_cn_composition), 0, 1, 0, 1}, + {&__pyx_n_s_cn_dat, __pyx_k_cn_dat, sizeof(__pyx_k_cn_dat), 0, 0, 1, 1}, + {&__pyx_n_u_cn_data, __pyx_k_cn_data, sizeof(__pyx_k_cn_data), 0, 1, 0, 1}, + {&__pyx_n_u_cn_data_type, __pyx_k_cn_data_type, sizeof(__pyx_k_cn_data_type), 0, 1, 0, 1}, + {&__pyx_n_u_cn_default_x, __pyx_k_cn_default_x, sizeof(__pyx_k_cn_default_x), 0, 1, 0, 1}, + {&__pyx_n_s_cn_dict, __pyx_k_cn_dict, sizeof(__pyx_k_cn_dict), 0, 0, 1, 1}, + {&__pyx_n_u_cn_flags, __pyx_k_cn_flags, sizeof(__pyx_k_cn_flags), 0, 1, 0, 1}, + {&__pyx_n_s_cn_hdr, __pyx_k_cn_hdr, sizeof(__pyx_k_cn_hdr), 0, 0, 1, 1}, + {&__pyx_n_u_cn_invalid_bit_pos, __pyx_k_cn_invalid_bit_pos, sizeof(__pyx_k_cn_invalid_bit_pos), 0, 1, 0, 1}, + {&__pyx_n_s_cn_key, __pyx_k_cn_key, sizeof(__pyx_k_cn_key), 0, 0, 1, 1}, + {&__pyx_n_s_cn_key_neg, __pyx_k_cn_key_neg, sizeof(__pyx_k_cn_key_neg), 0, 0, 1, 1}, + {&__pyx_n_s_cn_key_uint, __pyx_k_cn_key_uint, sizeof(__pyx_k_cn_key_uint), 0, 0, 1, 1}, + {&__pyx_n_u_cn_md_comment, __pyx_k_cn_md_comment, sizeof(__pyx_k_cn_md_comment), 0, 1, 0, 1}, + {&__pyx_n_u_cn_md_unit, __pyx_k_cn_md_unit, sizeof(__pyx_k_cn_md_unit), 0, 1, 0, 1}, + {&__pyx_n_s_cn_name, __pyx_k_cn_name, sizeof(__pyx_k_cn_name), 0, 0, 1, 1}, + {&__pyx_n_u_cn_precision, __pyx_k_cn_precision, sizeof(__pyx_k_cn_precision), 0, 1, 0, 1}, + {&__pyx_n_u_cn_reserved, __pyx_k_cn_reserved, sizeof(__pyx_k_cn_reserved), 0, 1, 0, 1}, + {&__pyx_n_u_cn_si_source, __pyx_k_cn_si_source, sizeof(__pyx_k_cn_si_source), 0, 1, 0, 1}, + {&__pyx_n_u_cn_sync_type, __pyx_k_cn_sync_type, sizeof(__pyx_k_cn_sync_type), 0, 1, 0, 1}, + {&__pyx_n_u_cn_tx_name, __pyx_k_cn_tx_name, sizeof(__pyx_k_cn_tx_name), 0, 1, 0, 1}, + {&__pyx_n_u_cn_type, __pyx_k_cn_type, sizeof(__pyx_k_cn_type), 0, 1, 0, 1}, + {&__pyx_n_u_cn_val_range_max, __pyx_k_cn_val_range_max, sizeof(__pyx_k_cn_val_range_max), 0, 1, 0, 1}, + {&__pyx_n_u_cn_val_range_min, __pyx_k_cn_val_range_min, sizeof(__pyx_k_cn_val_range_min), 0, 1, 0, 1}, {&__pyx_n_s_collections, __pyx_k_collections, sizeof(__pyx_k_collections), 0, 0, 1, 1}, {&__pyx_kp_s_collections_abc, __pyx_k_collections_abc, sizeof(__pyx_k_collections_abc), 0, 0, 1, 0}, {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0}, @@ -39705,7 +44748,11 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_kp_s_dataRead_pyx, __pyx_k_dataRead_pyx, sizeof(__pyx_k_dataRead_pyx), 0, 0, 1, 0}, {&__pyx_n_s_data_block_length, __pyx_k_data_block_length, sizeof(__pyx_k_data_block_length), 0, 0, 1, 1}, {&__pyx_n_s_data_format, __pyx_k_data_format, sizeof(__pyx_k_data_format), 0, 0, 1, 1}, + {&__pyx_n_s_data_offset, __pyx_k_data_offset, sizeof(__pyx_k_data_offset), 0, 0, 1, 1}, + {&__pyx_n_s_dbl_ptr, __pyx_k_dbl_ptr, sizeof(__pyx_k_dbl_ptr), 0, 0, 1, 1}, {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1}, + {&__pyx_n_s_desc_str, __pyx_k_desc_str, sizeof(__pyx_k_desc_str), 0, 0, 1, 1}, + {&__pyx_n_u_description, __pyx_k_description, sizeof(__pyx_k_description), 0, 1, 0, 1}, {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, {&__pyx_n_s_dict_2, __pyx_k_dict_2, sizeof(__pyx_k_dict_2), 0, 0, 1, 1}, {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0}, @@ -39718,20 +44765,28 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1}, {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1}, {&__pyx_n_s_errors, __pyx_k_errors, sizeof(__pyx_k_errors), 0, 0, 1, 1}, + {&__pyx_n_s_extra_buf, __pyx_k_extra_buf, sizeof(__pyx_k_extra_buf), 0, 0, 1, 1}, + {&__pyx_n_s_extra_links, __pyx_k_extra_links, sizeof(__pyx_k_extra_links), 0, 0, 1, 1}, + {&__pyx_n_s_fd, __pyx_k_fd, sizeof(__pyx_k_fd), 0, 0, 1, 1}, {&__pyx_n_s_fid, __pyx_k_fid, sizeof(__pyx_k_fid), 0, 0, 1, 1}, {&__pyx_n_s_fileno, __pyx_k_fileno, sizeof(__pyx_k_fileno), 0, 0, 1, 1}, + {&__pyx_n_s_find, __pyx_k_find, sizeof(__pyx_k_find), 0, 0, 1, 1}, + {&__pyx_n_s_first_pointer, __pyx_k_first_pointer, sizeof(__pyx_k_first_pointer), 0, 0, 1, 1}, {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, {&__pyx_n_s_float16, __pyx_k_float16, sizeof(__pyx_k_float16), 0, 0, 1, 1}, {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1}, {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1}, {&__pyx_n_s_frombuffer, __pyx_k_frombuffer, sizeof(__pyx_k_frombuffer), 0, 0, 1, 1}, + {&__pyx_n_s_fromstring, __pyx_k_fromstring, sizeof(__pyx_k_fromstring), 0, 0, 1, 1}, {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0}, + {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1}, {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, {&__pyx_kp_u_got, __pyx_k_got, sizeof(__pyx_k_got), 0, 1, 0, 0}, {&__pyx_kp_u_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 1, 0, 0}, {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1}, + {&__pyx_n_u_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 1, 0, 1}, {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1}, {&__pyx_n_s_info, __pyx_k_info, sizeof(__pyx_k_info), 0, 0, 1, 1}, @@ -39741,21 +44796,31 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0}, {&__pyx_n_s_keys, __pyx_k_keys, sizeof(__pyx_k_keys), 0, 0, 1, 1}, + {&__pyx_n_u_length, __pyx_k_length, sizeof(__pyx_k_length), 0, 1, 0, 1}, + {&__pyx_n_u_link_count, __pyx_k_link_count, sizeof(__pyx_k_link_count), 0, 1, 0, 1}, {&__pyx_n_u_little, __pyx_k_little, sizeof(__pyx_k_little), 0, 1, 0, 1}, + {&__pyx_n_s_lnk, __pyx_k_lnk, sizeof(__pyx_k_lnk), 0, 0, 1, 1}, + {&__pyx_n_s_lxml, __pyx_k_lxml, sizeof(__pyx_k_lxml), 0, 0, 1, 1}, + {&__pyx_n_u_m, __pyx_k_m, sizeof(__pyx_k_m), 0, 1, 0, 1}, {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, {&__pyx_n_s_max_len, __pyx_k_max_len, sizeof(__pyx_k_max_len), 0, 0, 1, 1}, {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1}, + {&__pyx_n_s_minimal, __pyx_k_minimal, sizeof(__pyx_k_minimal), 0, 0, 1, 1}, {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1}, {&__pyx_n_s_nBytes_aligned, __pyx_k_nBytes_aligned, sizeof(__pyx_k_nBytes_aligned), 0, 0, 1, 1}, {&__pyx_n_s_n_bytes, __pyx_k_n_bytes, sizeof(__pyx_k_n_bytes), 0, 0, 1, 1}, + {&__pyx_n_s_n_extra, __pyx_k_n_extra, sizeof(__pyx_k_n_extra), 0, 0, 1, 1}, {&__pyx_n_s_n_records, __pyx_k_n_records, sizeof(__pyx_k_n_records), 0, 0, 1, 1}, {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_u_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 1, 0, 1}, {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1}, {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, + {&__pyx_n_u_needs_completion, __pyx_k_needs_completion, sizeof(__pyx_k_needs_completion), 0, 1, 0, 1}, {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_nread, __pyx_k_nread, sizeof(__pyx_k_nread), 0, 0, 1, 1}, {&__pyx_n_s_numberOfRecords, __pyx_k_numberOfRecords, sizeof(__pyx_k_numberOfRecords), 0, 0, 1, 1}, {&__pyx_n_s_number_of_records, __pyx_k_number_of_records, sizeof(__pyx_k_number_of_records), 0, 0, 1, 1}, {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, @@ -39763,12 +44828,14 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_kp_u_numpy__core_umath_failed_to_impo, __pyx_k_numpy__core_umath_failed_to_impo, sizeof(__pyx_k_numpy__core_umath_failed_to_impo), 0, 1, 0, 0}, {&__pyx_n_s_numpy_format, __pyx_k_numpy_format, sizeof(__pyx_k_numpy_format), 0, 0, 1, 1}, {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1}, + {&__pyx_n_s_objectify, __pyx_k_objectify, sizeof(__pyx_k_objectify), 0, 0, 1, 1}, {&__pyx_n_s_offset, __pyx_k_offset, sizeof(__pyx_k_offset), 0, 0, 1, 1}, {&__pyx_n_s_offsets_array, __pyx_k_offsets_array, sizeof(__pyx_k_offsets_array), 0, 0, 1, 1}, {&__pyx_n_s_order, __pyx_k_order, sizeof(__pyx_k_order), 0, 0, 1, 1}, {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1}, {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, {&__pyx_n_s_pointer, __pyx_k_pointer, sizeof(__pyx_k_pointer), 0, 0, 1, 1}, + {&__pyx_n_u_pointer, __pyx_k_pointer, sizeof(__pyx_k_pointer), 0, 1, 0, 1}, {&__pyx_n_s_pos, __pyx_k_pos, sizeof(__pyx_k_pos), 0, 0, 1, 1}, {&__pyx_n_s_pos_byte_beg, __pyx_k_pos_byte_beg, sizeof(__pyx_k_pos_byte_beg), 0, 0, 1, 1}, {&__pyx_n_s_pos_byte_end, __pyx_k_pos_byte_end, sizeof(__pyx_k_pos_byte_end), 0, 0, 1, 1}, @@ -39781,8 +44848,10 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1}, {&__pyx_n_s_pyx_unpickle_SymBufReader, __pyx_k_pyx_unpickle_SymBufReader, sizeof(__pyx_k_pyx_unpickle_SymBufReader), 0, 0, 1, 1}, {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_u_rad, __pyx_k_rad, sizeof(__pyx_k_rad), 0, 1, 0, 1}, {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, {&__pyx_n_s_read, __pyx_k_read, sizeof(__pyx_k_read), 0, 0, 1, 1}, + {&__pyx_n_s_read_cn_chain_fast, __pyx_k_read_cn_chain_fast, sizeof(__pyx_k_read_cn_chain_fast), 0, 0, 1, 1}, {&__pyx_n_s_rec, __pyx_k_rec, sizeof(__pyx_k_rec), 0, 0, 1, 1}, {&__pyx_n_s_record, __pyx_k_record, sizeof(__pyx_k_record), 0, 0, 1, 1}, {&__pyx_n_u_record, __pyx_k_record, sizeof(__pyx_k_record), 0, 1, 0, 1}, @@ -39799,8 +44868,10 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, {&__pyx_n_s_register, __pyx_k_register, sizeof(__pyx_k_register), 0, 0, 1, 1}, {&__pyx_n_u_replace, __pyx_k_replace, sizeof(__pyx_k_replace), 0, 1, 0, 1}, + {&__pyx_n_s_results, __pyx_k_results, sizeof(__pyx_k_results), 0, 0, 1, 1}, {&__pyx_n_s_rjust, __pyx_k_rjust, sizeof(__pyx_k_rjust), 0, 0, 1, 1}, {&__pyx_n_s_rstrip, __pyx_k_rstrip, sizeof(__pyx_k_rstrip), 0, 0, 1, 1}, + {&__pyx_n_u_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 1, 0, 1}, {&__pyx_n_s_sd_block, __pyx_k_sd_block, sizeof(__pyx_k_sd_block), 0, 0, 1, 1}, {&__pyx_n_s_sd_block_length, __pyx_k_sd_block_length, sizeof(__pyx_k_sd_block_length), 0, 0, 1, 1}, {&__pyx_n_s_sd_data_read, __pyx_k_sd_data_read, sizeof(__pyx_k_sd_data_read), 0, 0, 1, 1}, @@ -39809,10 +44880,21 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, + {&__pyx_n_u_si_bus_type, __pyx_k_si_bus_type, sizeof(__pyx_k_si_bus_type), 0, 1, 0, 1}, + {&__pyx_n_s_si_cache, __pyx_k_si_cache, sizeof(__pyx_k_si_cache), 0, 0, 1, 1}, + {&__pyx_n_s_si_dict, __pyx_k_si_dict, sizeof(__pyx_k_si_dict), 0, 0, 1, 1}, + {&__pyx_n_u_si_flags, __pyx_k_si_flags, sizeof(__pyx_k_si_flags), 0, 1, 0, 1}, + {&__pyx_n_u_si_md_comment, __pyx_k_si_md_comment, sizeof(__pyx_k_si_md_comment), 0, 1, 0, 1}, + {&__pyx_n_s_si_ptr, __pyx_k_si_ptr, sizeof(__pyx_k_si_ptr), 0, 0, 1, 1}, + {&__pyx_n_u_si_tx_name, __pyx_k_si_tx_name, sizeof(__pyx_k_si_tx_name), 0, 1, 0, 1}, + {&__pyx_n_u_si_tx_path, __pyx_k_si_tx_path, sizeof(__pyx_k_si_tx_path), 0, 1, 0, 1}, + {&__pyx_n_u_si_type, __pyx_k_si_type, sizeof(__pyx_k_si_type), 0, 1, 0, 1}, {&__pyx_n_s_signal_data_type, __pyx_k_signal_data_type, sizeof(__pyx_k_signal_data_type), 0, 0, 1, 1}, {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1}, {&__pyx_n_s_sizes_array, __pyx_k_sizes_array, sizeof(__pyx_k_sizes_array), 0, 0, 1, 1}, {&__pyx_n_s_sorted_data_read, __pyx_k_sorted_data_read, sizeof(__pyx_k_sorted_data_read), 0, 0, 1, 1}, + {&__pyx_n_u_source_name, __pyx_k_source_name, sizeof(__pyx_k_source_name), 0, 1, 0, 1}, + {&__pyx_n_u_source_path, __pyx_k_source_path, sizeof(__pyx_k_source_path), 0, 1, 0, 1}, {&__pyx_n_s_spec, __pyx_k_spec, sizeof(__pyx_k_spec), 0, 0, 1, 1}, {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1}, {&__pyx_n_s_state, __pyx_k_state, sizeof(__pyx_k_state), 0, 0, 1, 1}, @@ -39831,6 +44913,8 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { {&__pyx_n_s_uint16, __pyx_k_uint16, sizeof(__pyx_k_uint16), 0, 0, 1, 1}, {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0}, {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0}, + {&__pyx_n_u_unit, __pyx_k_unit, sizeof(__pyx_k_unit), 0, 1, 0, 1}, + {&__pyx_n_s_unit_str, __pyx_k_unit_str, sizeof(__pyx_k_unit_str), 0, 0, 1, 1}, {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1}, {&__pyx_n_s_unsorted_data_read4, __pyx_k_unsorted_data_read4, sizeof(__pyx_k_unsorted_data_read4), 0, 0, 1, 1}, {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, @@ -39854,8 +44938,9 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { } /* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 262, __pyx_L1_error) - __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 1060, __pyx_L1_error) + __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 274, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 428, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 1486, __pyx_L1_error) __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 83, __pyx_L1_error) __pyx_builtin_OverflowError = __Pyx_GetBuiltinName(__pyx_n_s_OverflowError); if (!__pyx_builtin_OverflowError) __PYX_ERR(1, 83, __pyx_L1_error) __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 86, __pyx_L1_error) @@ -39934,58 +45019,58 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple__10); __Pyx_GIVEREF(__pyx_tuple__10); - /* "dataRead.pyx":65 + /* "dataRead.pyx":66 * self._pos += pos * else: # whence == 2 (from end) * self._fid.seek(0, 2) # <<<<<<<<<<<<<< * self._pos = self._fid.tell() + pos * return self._pos */ - __pyx_tuple__11 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_2); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 65, __pyx_L1_error) + __pyx_tuple__11 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_2); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 66, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__11); __Pyx_GIVEREF(__pyx_tuple__11); - /* "dataRead.pyx":1117 + /* "dataRead.pyx":1543 * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') */ - __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1117, __pyx_L1_error) + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1543, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__14); __Pyx_GIVEREF(__pyx_tuple__14); - /* "dataRead.pyx":1119 + /* "dataRead.pyx":1545 * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_utf_16_le); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 1119, __pyx_L1_error) + __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_utf_16_le); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 1545, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); - /* "dataRead.pyx":1121 + /* "dataRead.pyx":1547 * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) > 0: * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_utf_16_be); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1121, __pyx_L1_error) + __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_utf_16_be); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1547, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__16); __Pyx_GIVEREF(__pyx_tuple__16); - /* "dataRead.pyx":1189 + /* "dataRead.pyx":1615 * if size > 0: * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif signal_data_type == 7: * for i in range(n_records): */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_ISO_8859_1); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 1189, __pyx_L1_error) + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_ISO_8859_1); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 1615, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__17); __Pyx_GIVEREF(__pyx_tuple__17); @@ -40101,53 +45186,53 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GIVEREF(__pyx_tuple__28); __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(1, 1, __pyx_L1_error) - /* "dataRead.pyx":58 + /* "dataRead.pyx":59 * return 0 * * def seek(self, Py_ssize_t pos, int whence=0): # <<<<<<<<<<<<<< * """Update logical cursor; does NOT touch the underlying file.""" * if whence == 0: */ - __pyx_tuple__30 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_pos, __pyx_n_s_whence); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 58, __pyx_L1_error) + __pyx_tuple__30 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_pos, __pyx_n_s_whence); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__30); __Pyx_GIVEREF(__pyx_tuple__30); - __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_seek, 58, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 58, __pyx_L1_error) - __pyx_tuple__32 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 58, __pyx_L1_error) + __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_seek, 59, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 59, __pyx_L1_error) + __pyx_tuple__32 = PyTuple_Pack(1, __pyx_int_0); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__32); __Pyx_GIVEREF(__pyx_tuple__32); - /* "dataRead.pyx":69 + /* "dataRead.pyx":70 * return self._pos * * def tell(self): # <<<<<<<<<<<<<< * return self._pos * */ - __pyx_tuple__33 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 69, __pyx_L1_error) + __pyx_tuple__33 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__33); __Pyx_GIVEREF(__pyx_tuple__33); - __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 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_dataRead_pyx, __pyx_n_s_tell, 69, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 69, __pyx_L1_error) + __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 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_dataRead_pyx, __pyx_n_s_tell, 70, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 70, __pyx_L1_error) - /* "dataRead.pyx":72 + /* "dataRead.pyx":73 * return self._pos * * def read(self, Py_ssize_t n=-1): # <<<<<<<<<<<<<< * """Return up to n bytes from the current position (or all if n<0).""" * cdef Py_ssize_t pos = self._pos */ - __pyx_tuple__35 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_n, __pyx_n_s_pos, __pyx_n_s_buf_end, __pyx_n_s_offset, __pyx_n_s_available, __pyx_n_s_end, __pyx_n_s_data); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 72, __pyx_L1_error) + __pyx_tuple__35 = PyTuple_Pack(8, __pyx_n_s_self, __pyx_n_s_n, __pyx_n_s_pos, __pyx_n_s_buf_end, __pyx_n_s_offset, __pyx_n_s_available, __pyx_n_s_end, __pyx_n_s_data); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 73, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__35); __Pyx_GIVEREF(__pyx_tuple__35); - __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 8, 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_dataRead_pyx, __pyx_n_s_read, 72, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 72, __pyx_L1_error) + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 8, 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_dataRead_pyx, __pyx_n_s_read, 73, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 73, __pyx_L1_error) - /* "dataRead.pyx":97 + /* "dataRead.pyx":98 * return data * * def fileno(self): # <<<<<<<<<<<<<< * return self._fid.fileno() * */ - __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 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_dataRead_pyx, __pyx_n_s_fileno, 97, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 97, __pyx_L1_error) + __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(1, 0, 0, 1, 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_dataRead_pyx, __pyx_n_s_fileno, 98, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) __PYX_ERR(0, 98, __pyx_L1_error) /* "(tree fragment)":1 * def __reduce_cython__(self): # <<<<<<<<<<<<<< @@ -40170,60 +45255,72 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GIVEREF(__pyx_tuple__40); __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(1, 16, __pyx_L1_error) - /* "dataRead.pyx":101 + /* "dataRead.pyx":322 + * + * + * def read_cn_chain_fast(object fid, uint64_t first_pointer, # <<<<<<<<<<<<<< + * dict si_cache, int minimal, bint channel_name_list): + * """Read the CN linked list starting at first_pointer using pread(). + */ + __pyx_tuple__42 = PyTuple_Pack(35, __pyx_n_s_fid, __pyx_n_s_first_pointer, __pyx_n_s_si_cache, __pyx_n_s_minimal, __pyx_n_s_channel_name_list, __pyx_n_s_fd, __pyx_n_s_pointer, __pyx_n_s_cn_hdr, __pyx_n_s_cn_dat, __pyx_n_s_cc_hdr, __pyx_n_s_cc_dat, __pyx_n_s_nread, __pyx_n_s_data_offset, __pyx_n_s_cc_data_offset, __pyx_n_s_n_extra, __pyx_n_s_n_bytes, __pyx_n_s_cn_key_uint, __pyx_n_s_si_ptr, __pyx_n_s_cc_ptr, __pyx_n_s_cn_key_neg, __pyx_n_s_cn_key, __pyx_n_s_results, __pyx_n_s_cn_dict, __pyx_n_s_cc_dict, __pyx_n_s_si_dict, __pyx_n_s_cn_name, __pyx_n_s_unit_str, __pyx_n_s_desc_str, __pyx_n_s_extra_buf, __pyx_n_s_dbl_ptr, __pyx_n_s_cc_val_buf, __pyx_n_s_cc_val_list, __pyx_n_s_i, __pyx_n_s_extra_links, __pyx_n_s_lnk); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 322, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__42); + __Pyx_GIVEREF(__pyx_tuple__42); + __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 35, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_read_cn_chain_fast, 322, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 322, __pyx_L1_error) + + /* "dataRead.pyx":527 * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) * def sorted_data_read(bytes tmp, unsigned short bit_count, */ - __pyx_tuple__42 = PyTuple_Pack(12, __pyx_n_s_tmp, __pyx_n_s_bit_count, __pyx_n_s_signal_data_type, __pyx_n_s_record_format, __pyx_n_s_number_of_records, __pyx_n_s_record_byte_size, __pyx_n_s_bit_offset, __pyx_n_s_pos_byte_beg, __pyx_n_s_n_bytes, __pyx_n_s_array, __pyx_n_s_bit_stream, __pyx_n_s_swap_flag); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__42); - __Pyx_GIVEREF(__pyx_tuple__42); - __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(10, 0, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sorted_data_read, 101, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_tuple__44 = PyTuple_Pack(12, __pyx_n_s_tmp, __pyx_n_s_bit_count, __pyx_n_s_signal_data_type, __pyx_n_s_record_format, __pyx_n_s_number_of_records, __pyx_n_s_record_byte_size, __pyx_n_s_bit_offset, __pyx_n_s_pos_byte_beg, __pyx_n_s_n_bytes, __pyx_n_s_array, __pyx_n_s_bit_stream, __pyx_n_s_swap_flag); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 527, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__44); + __Pyx_GIVEREF(__pyx_tuple__44); + __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(10, 0, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sorted_data_read, 527, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 527, __pyx_L1_error) - /* "dataRead.pyx":897 + /* "dataRead.pyx":1323 * return buf.byteswap() * * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< * const unsigned short record_id_size, * const unsigned long long data_block_length): */ - __pyx_tuple__44 = PyTuple_Pack(28, __pyx_n_s_record, __pyx_n_s_info, __pyx_n_s_tmp, __pyx_n_s_record_id_size, __pyx_n_s_data_block_length, __pyx_n_s_bit_stream, __pyx_n_s_position, __pyx_n_s_record_id_char, __pyx_n_s_record_id_short, __pyx_n_s_record_id_long, __pyx_n_s_record_id_long_long, __pyx_n_s_buf, __pyx_n_s_VLSD, __pyx_n_s_pos_byte_beg, __pyx_n_s_pos_byte_end, __pyx_n_s_c_format_structure, __pyx_n_s_byte_length, __pyx_n_s_numpy_format, __pyx_n_s_index, __pyx_n_s_CGrecordLength, __pyx_n_s_VLSD_flag, __pyx_n_s_VLSD_CG_name, __pyx_n_s_VLSD_CG_signal_data_type, __pyx_n_s_channel_name_set, __pyx_n_s_record_id, __pyx_n_s_Channel, __pyx_n_s_name, __pyx_n_s_channel_name); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 897, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__44); - __Pyx_GIVEREF(__pyx_tuple__44); - __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_unsorted_data_read4, 897, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 897, __pyx_L1_error) + __pyx_tuple__46 = PyTuple_Pack(28, __pyx_n_s_record, __pyx_n_s_info, __pyx_n_s_tmp, __pyx_n_s_record_id_size, __pyx_n_s_data_block_length, __pyx_n_s_bit_stream, __pyx_n_s_position, __pyx_n_s_record_id_char, __pyx_n_s_record_id_short, __pyx_n_s_record_id_long, __pyx_n_s_record_id_long_long, __pyx_n_s_buf, __pyx_n_s_VLSD, __pyx_n_s_pos_byte_beg, __pyx_n_s_pos_byte_end, __pyx_n_s_c_format_structure, __pyx_n_s_byte_length, __pyx_n_s_numpy_format, __pyx_n_s_index, __pyx_n_s_CGrecordLength, __pyx_n_s_VLSD_flag, __pyx_n_s_VLSD_CG_name, __pyx_n_s_VLSD_CG_signal_data_type, __pyx_n_s_channel_name_set, __pyx_n_s_record_id, __pyx_n_s_Channel, __pyx_n_s_name, __pyx_n_s_channel_name); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1323, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__46); + __Pyx_GIVEREF(__pyx_tuple__46); + __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_unsorted_data_read4, 1323, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 1323, __pyx_L1_error) - /* "dataRead.pyx":1032 + /* "dataRead.pyx":1458 * * * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< * unsigned long long sd_block_length, unsigned long long n_records): * """ Reads vlsd channel from its SD Block bytes */ - __pyx_tuple__46 = PyTuple_Pack(11, __pyx_n_s_signal_data_type, __pyx_n_s_sd_block, __pyx_n_s_sd_block_length, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_max_len, __pyx_n_s_vlsd_len, __pyx_n_s_VLSDLen, __pyx_n_s_pointer, __pyx_n_s_rec, __pyx_n_s_channel_format); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1032, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__46); - __Pyx_GIVEREF(__pyx_tuple__46); - __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sd_data_read, 1032, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 1032, __pyx_L1_error) + __pyx_tuple__48 = PyTuple_Pack(11, __pyx_n_s_signal_data_type, __pyx_n_s_sd_block, __pyx_n_s_sd_block_length, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_max_len, __pyx_n_s_vlsd_len, __pyx_n_s_VLSDLen, __pyx_n_s_pointer, __pyx_n_s_rec, __pyx_n_s_channel_format); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1458, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__48); + __Pyx_GIVEREF(__pyx_tuple__48); + __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sd_data_read, 1458, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 1458, __pyx_L1_error) - /* "dataRead.pyx":1130 + /* "dataRead.pyx":1556 * * * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< * object offsets_array, object sizes_array, * unsigned long long n_records): */ - __pyx_tuple__48 = PyTuple_Pack(10, __pyx_n_s_signal_data_type, __pyx_n_s_vd_block, __pyx_n_s_offsets_array, __pyx_n_s_sizes_array, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_i, __pyx_n_s_offset, __pyx_n_s_size, __pyx_n_s_max_len); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1130, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__48); - __Pyx_GIVEREF(__pyx_tuple__48); - __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_vd_data_read, 1130, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 1130, __pyx_L1_error) + __pyx_tuple__50 = PyTuple_Pack(10, __pyx_n_s_signal_data_type, __pyx_n_s_vd_block, __pyx_n_s_offsets_array, __pyx_n_s_sizes_array, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_i, __pyx_n_s_offset, __pyx_n_s_size, __pyx_n_s_max_len); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1556, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__50); + __Pyx_GIVEREF(__pyx_tuple__50); + __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_vd_data_read, 1556, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 1556, __pyx_L1_error) /* "(tree fragment)":1 * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_SymBufReader, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(3, 0, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_SymBufReader, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_RefNannyFinishContext(); return 0; __pyx_L1_error:; @@ -40233,6 +45330,10 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* #### Code section: init_constants ### */ static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { + __pyx_umethod_PyBytes_Type_find.type = (PyObject*)&PyBytes_Type; + __pyx_umethod_PyBytes_Type_find.method_name = &__pyx_n_s_find; + __pyx_umethod_PyDict_Type_get.type = (PyObject*)&PyDict_Type; + __pyx_umethod_PyDict_Type_get.method_name = &__pyx_n_s_get; __pyx_umethod_PyDict_Type_update.type = (PyObject*)&PyDict_Type; __pyx_umethod_PyDict_Type_update.method_name = &__pyx_n_s_update; if (__Pyx_CreateStringTabAndInitStrings() < 0) __PYX_ERR(0, 1, __pyx_L1_error); @@ -40240,6 +45341,8 @@ static CYTHON_SMALL_CODE int __Pyx_InitConstants(void) { __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_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) __PYX_ERR(0, 1, __pyx_L1_error) __pyx_int_7 = PyInt_FromLong(7); if (unlikely(!__pyx_int_7)) __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) @@ -40344,15 +45447,15 @@ static int __Pyx_modinit_type_init_code(void) { __pyx_vtabptr_8dataRead_SymBufReader = &__pyx_vtable_8dataRead_SymBufReader; __pyx_vtable_8dataRead_SymBufReader._fill = (int (*)(struct __pyx_obj_8dataRead_SymBufReader *, Py_ssize_t))__pyx_f_8dataRead_12SymBufReader__fill; #if CYTHON_USE_TYPE_SPECS - __pyx_ptype_8dataRead_SymBufReader = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8dataRead_SymBufReader_spec, NULL); if (unlikely(!__pyx_ptype_8dataRead_SymBufReader)) __PYX_ERR(0, 25, __pyx_L1_error) - if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8dataRead_SymBufReader_spec, __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + __pyx_ptype_8dataRead_SymBufReader = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_8dataRead_SymBufReader_spec, NULL); if (unlikely(!__pyx_ptype_8dataRead_SymBufReader)) __PYX_ERR(0, 26, __pyx_L1_error) + if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_8dataRead_SymBufReader_spec, __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 26, __pyx_L1_error) #else __pyx_ptype_8dataRead_SymBufReader = &__pyx_type_8dataRead_SymBufReader; #endif #if !CYTHON_COMPILING_IN_LIMITED_API #endif #if !CYTHON_USE_TYPE_SPECS - if (__Pyx_PyType_Ready(__pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + if (__Pyx_PyType_Ready(__pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 26, __pyx_L1_error) #endif #if PY_MAJOR_VERSION < 3 __pyx_ptype_8dataRead_SymBufReader->tp_print = 0; @@ -40362,13 +45465,13 @@ static int __Pyx_modinit_type_init_code(void) { __pyx_ptype_8dataRead_SymBufReader->tp_getattro = __Pyx_PyObject_GenericGetAttr; } #endif - if (__Pyx_SetVtable(__pyx_ptype_8dataRead_SymBufReader, __pyx_vtabptr_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + if (__Pyx_SetVtable(__pyx_ptype_8dataRead_SymBufReader, __pyx_vtabptr_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 26, __pyx_L1_error) #if !CYTHON_COMPILING_IN_LIMITED_API - if (__Pyx_MergeVtables(__pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + if (__Pyx_MergeVtables(__pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 26, __pyx_L1_error) #endif - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SymBufReader, (PyObject *) __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_SymBufReader, (PyObject *) __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 26, __pyx_L1_error) #if !CYTHON_COMPILING_IN_LIMITED_API - if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 25, __pyx_L1_error) + if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_8dataRead_SymBufReader) < 0) __PYX_ERR(0, 26, __pyx_L1_error) #endif __pyx_vtabptr_array = &__pyx_vtable_array; __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview; @@ -41392,7 +46495,7 @@ if (!__Pyx_RefNanny) { * import numpy as np * cimport numpy as np * from sys import byteorder # <<<<<<<<<<<<<< - * from libc.stdint cimport uint16_t, uint32_t, uint64_t + * from libc.stdint cimport int64_t, uint8_t, uint16_t, uint32_t, uint64_t * from libc.stdio cimport printf */ __pyx_t_7 = PyList_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4, __pyx_L1_error) @@ -41409,57 +46512,57 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":58 + /* "dataRead.pyx":59 * return 0 * * def seek(self, Py_ssize_t pos, int whence=0): # <<<<<<<<<<<<<< * """Update logical cursor; does NOT touch the underlying file.""" * if whence == 0: */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_3seek, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_seek, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_3seek, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_seek, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__32); - if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_seek, __pyx_t_4) < 0) __PYX_ERR(0, 58, __pyx_L1_error) + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_seek, __pyx_t_4) < 0) __PYX_ERR(0, 59, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); - /* "dataRead.pyx":69 + /* "dataRead.pyx":70 * return self._pos * * def tell(self): # <<<<<<<<<<<<<< * return self._pos * */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_5tell, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_tell, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 69, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_5tell, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_tell, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_tell, __pyx_t_4) < 0) __PYX_ERR(0, 69, __pyx_L1_error) + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_tell, __pyx_t_4) < 0) __PYX_ERR(0, 70, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); - /* "dataRead.pyx":72 + /* "dataRead.pyx":73 * return self._pos * * def read(self, Py_ssize_t n=-1): # <<<<<<<<<<<<<< * """Return up to n bytes from the current position (or all if n<0).""" * cdef Py_ssize_t pos = self._pos */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_7read, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 72, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_7read, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 73, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__4); - if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_read, __pyx_t_4) < 0) __PYX_ERR(0, 72, __pyx_L1_error) + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_read, __pyx_t_4) < 0) __PYX_ERR(0, 73, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); - /* "dataRead.pyx":97 + /* "dataRead.pyx":98 * return data * * def fileno(self): # <<<<<<<<<<<<<< * return self._fid.fileno() * */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_9fileno, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_fileno, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 97, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_12SymBufReader_9fileno, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_SymBufReader_fileno, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 98, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_fileno, __pyx_t_4) < 0) __PYX_ERR(0, 97, __pyx_L1_error) + if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_8dataRead_SymBufReader, __pyx_n_s_fileno, __pyx_t_4) < 0) __PYX_ERR(0, 98, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); @@ -41486,52 +46589,103 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); - /* "dataRead.pyx":101 + /* "dataRead.pyx":108 + * # + * + * _SI_TYPE_MAP = {0: 'OTHER', 1: 'ECU', 2: 'BUS', 3: 'I/O', 4: 'TOOL', 5: 'USER'} # <<<<<<<<<<<<<< + * _SI_BUS_MAP = {0: 'NONE', 1: 'OTHER', 2: 'CAN', 3: 'LIN', + * 4: 'MOST', 5: 'FLEXRAY', 6: 'K_LINE', 7: 'ETHERNET', 8: 'USB'} + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_int_0, __pyx_n_u_OTHER) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_n_u_ECU) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_2, __pyx_n_u_BUS) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_3, __pyx_kp_u_I_O) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_4, __pyx_n_u_TOOL) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_5, __pyx_n_u_USER) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SI_TYPE_MAP, __pyx_t_4) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":109 + * + * _SI_TYPE_MAP = {0: 'OTHER', 1: 'ECU', 2: 'BUS', 3: 'I/O', 4: 'TOOL', 5: 'USER'} + * _SI_BUS_MAP = {0: 'NONE', 1: 'OTHER', 2: 'CAN', 3: 'LIN', # <<<<<<<<<<<<<< + * 4: 'MOST', 5: 'FLEXRAY', 6: 'K_LINE', 7: 'ETHERNET', 8: 'USB'} + * + */ + __pyx_t_4 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_t_4, __pyx_int_0, __pyx_n_u_NONE) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_n_u_OTHER) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_2, __pyx_n_u_CAN) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_3, __pyx_n_u_LIN) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_4, __pyx_n_u_MOST) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_5, __pyx_n_u_FLEXRAY) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_6, __pyx_n_u_K_LINE) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_7, __pyx_n_u_ETHERNET) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_8, __pyx_n_u_USB) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SI_BUS_MAP, __pyx_t_4) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":322 + * + * + * def read_cn_chain_fast(object fid, uint64_t first_pointer, # <<<<<<<<<<<<<< + * dict si_cache, int minimal, bint channel_name_list): + * """Read the CN linked list starting at first_pointer using pread(). + */ + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_1read_cn_chain_fast, 0, __pyx_n_s_read_cn_chain_fast, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 322, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_read_cn_chain_fast, __pyx_t_4) < 0) __PYX_ERR(0, 322, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "dataRead.pyx":527 * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) * def sorted_data_read(bytes tmp, unsigned short bit_count, */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_1sorted_data_read, 0, __pyx_n_s_sorted_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 101, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_3sorted_data_read, 0, __pyx_n_s_sorted_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sorted_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 101, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sorted_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 527, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":897 + /* "dataRead.pyx":1323 * return buf.byteswap() * * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< * const unsigned short record_id_size, * const unsigned long long data_block_length): */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_3unsorted_data_read4, 0, __pyx_n_s_unsorted_data_read4, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 897, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_5unsorted_data_read4, 0, __pyx_n_s_unsorted_data_read4, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1323, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_unsorted_data_read4, __pyx_t_4) < 0) __PYX_ERR(0, 897, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_unsorted_data_read4, __pyx_t_4) < 0) __PYX_ERR(0, 1323, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1032 + /* "dataRead.pyx":1458 * * * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< * unsigned long long sd_block_length, unsigned long long n_records): * """ Reads vlsd channel from its SD Block bytes */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_5sd_data_read, 0, __pyx_n_s_sd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1032, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_7sd_data_read, 0, __pyx_n_s_sd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1032, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1458, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1130 + /* "dataRead.pyx":1556 * * * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< * object offsets_array, object sizes_array, * unsigned long long n_records): */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_7vd_data_read, 0, __pyx_n_s_vd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1130, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_9vd_data_read, 0, __pyx_n_s_vd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1556, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_vd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1130, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_vd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1556, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "(tree fragment)":1 @@ -41539,7 +46693,7 @@ if (!__Pyx_RefNanny) { * cdef object __pyx_PickleError * cdef object __pyx_result */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_9__pyx_unpickle_SymBufReader, 0, __pyx_n_s_pyx_unpickle_SymBufReader, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_11__pyx_unpickle_SymBufReader, 0, __pyx_n_s_pyx_unpickle_SymBufReader, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_SymBufReader, __pyx_t_4) < 0) __PYX_ERR(1, 1, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; @@ -44020,22 +49174,283 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { return value; } -/* HasAttr */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { - PyObject *r; - if (unlikely(!__Pyx_PyBaseString_Check(n))) { - PyErr_SetString(PyExc_TypeError, - "hasattr(): attribute name must be string"); - return -1; +/* HasAttr */ +static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { + PyObject *r; + if (unlikely(!__Pyx_PyBaseString_Check(n))) { + PyErr_SetString(PyExc_TypeError, + "hasattr(): attribute name must be string"); + return -1; + } + r = __Pyx_GetAttr(o, n); + if (!r) { + PyErr_Clear(); + return 0; + } else { + Py_DECREF(r); + return 1; + } +} + +/* decode_c_bytes */ +static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( + const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, + const char* encoding, const char* errors, + PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { + if (unlikely((start < 0) | (stop < 0))) { + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + stop += length; + } + if (stop > length) + stop = length; + if (unlikely(stop <= start)) + return __Pyx_NewRef(__pyx_empty_unicode); + length = stop - start; + cstring += start; + if (decode_func) { + return decode_func(cstring, length, errors); + } else { + return PyUnicode_Decode(cstring, length, encoding, errors); + } +} + +/* UnpackUnboundCMethod */ +static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) { + PyObject *result; + PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args)); + if (unlikely(!selfless_args)) return NULL; + result = PyObject_Call(method, selfless_args, kwargs); + Py_DECREF(selfless_args); + return result; +} +static PyMethodDef __Pyx_UnboundCMethod_Def = { + "CythonUnboundCMethod", + __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall), + METH_VARARGS | METH_KEYWORDS, + NULL +}; +static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { + PyObject *method; + method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); + if (unlikely(!method)) + return -1; + target->method = method; +#if CYTHON_COMPILING_IN_CPYTHON + #if PY_MAJOR_VERSION >= 3 + if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) + #else + if (likely(!__Pyx_CyOrPyCFunction_Check(method))) + #endif + { + PyMethodDescrObject *descr = (PyMethodDescrObject*) method; + target->func = descr->d_method->ml_meth; + target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); + } else +#endif +#if CYTHON_COMPILING_IN_PYPY +#else + if (PyCFunction_Check(method)) +#endif + { + PyObject *self; + int self_found; +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + self = PyObject_GetAttrString(method, "__self__"); + if (!self) { + PyErr_Clear(); + } +#else + self = PyCFunction_GET_SELF(method); +#endif + self_found = (self && self != Py_None); +#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY + Py_XDECREF(self); +#endif + if (self_found) { + PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method); + if (unlikely(!unbound_method)) return -1; + Py_DECREF(method); + target->method = unbound_method; + } + } + return 0; +} + +/* CallUnboundCMethod1 */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { + if (likely(cfunc->func)) { + int flag = cfunc->flag; + if (flag == METH_O) { + return (*(cfunc->func))(self, arg); + } else if ((PY_VERSION_HEX >= 0x030600B1) && flag == METH_FASTCALL) { + #if PY_VERSION_HEX >= 0x030700A0 + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); + #else + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + #endif + } else if ((PY_VERSION_HEX >= 0x030700A0) && flag == (METH_FASTCALL | METH_KEYWORDS)) { + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); + } + } + return __Pyx__CallUnboundCMethod1(cfunc, self, arg); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(1); + if (unlikely(!args)) goto bad; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 1, arg); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + } +#else + args = PyTuple_Pack(2, self, arg); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); +#endif +bad: + Py_XDECREF(args); + return result; +} + +/* CallUnboundCMethod2 */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030600B1 +static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2) { + if (likely(cfunc->func)) { + PyObject *args[2] = {arg1, arg2}; + if (cfunc->flag == METH_FASTCALL) { + #if PY_VERSION_HEX >= 0x030700A0 + return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, args, 2); + #else + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL); + #endif + } + #if PY_VERSION_HEX >= 0x030700A0 + if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS)) + return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, 2, NULL); + #endif + } + return __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2); +} +#endif +static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2){ + PyObject *args, *result = NULL; + if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; +#if CYTHON_COMPILING_IN_CPYTHON + if (cfunc->func && (cfunc->flag & METH_VARARGS)) { + args = PyTuple_New(2); + if (unlikely(!args)) goto bad; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + if (cfunc->flag & METH_KEYWORDS) + result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); + else + result = (*cfunc->func)(self, args); + } else { + args = PyTuple_New(3); + if (unlikely(!args)) goto bad; + Py_INCREF(self); + PyTuple_SET_ITEM(args, 0, self); + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 1, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 2, arg2); + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + } +#else + args = PyTuple_Pack(3, self, arg1, arg2); + if (unlikely(!args)) goto bad; + result = __Pyx_PyObject_Call(cfunc->method, args, NULL); +#endif +bad: + Py_XDECREF(args); + return result; +} + +/* SliceTupleAndList */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) { + Py_ssize_t start = *_start, stop = *_stop, length = *_length; + if (start < 0) { + start += length; + if (start < 0) + start = 0; + } + if (stop < 0) + stop += length; + else if (stop > length) + stop = length; + *_length = stop - start; + *_start = start; + *_stop = stop; +} +static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice( + PyObject* src, Py_ssize_t start, Py_ssize_t stop) { + Py_ssize_t length = PyList_GET_SIZE(src); + __Pyx_crop_slice(&start, &stop, &length); + if (length <= 0) { + return PyList_New(0); + } + return __Pyx_PyList_FromArray(((PyListObject*)src)->ob_item + start, length); +} +static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice( + PyObject* src, Py_ssize_t start, Py_ssize_t stop) { + Py_ssize_t length = PyTuple_GET_SIZE(src); + __Pyx_crop_slice(&start, &stop, &length); + return __Pyx_PyTuple_FromArray(((PyTupleObject*)src)->ob_item + start, length); +} +#endif + +/* dict_getitem_default */ +static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) { + PyObject* value; +#if PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000) + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (unlikely(PyErr_Occurred())) + return NULL; + value = default_value; } - r = __Pyx_GetAttr(o, n); - if (!r) { - PyErr_Clear(); - return 0; - } else { - Py_DECREF(r); - return 1; + Py_INCREF(value); + if ((1)); +#else + if (PyString_CheckExact(key) || PyUnicode_CheckExact(key) || PyInt_CheckExact(key)) { + value = PyDict_GetItem(d, key); + if (unlikely(!value)) { + value = default_value; + } + Py_INCREF(value); + } +#endif + else { + if (default_value == Py_None) + value = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_get, d, key); + else + value = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyDict_Type_get, d, key, default_value); } + return value; } /* IsLittleEndian */ @@ -44992,2676 +50407,3101 @@ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_di } } #endif - } - *p_orig_length = 0; - if (method_name) { - PyObject* iter; - iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); - if (!iterable) - return NULL; -#if !CYTHON_COMPILING_IN_PYPY - if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) - return iterable; + } + *p_orig_length = 0; + if (method_name) { + PyObject* iter; + iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); + if (!iterable) + return NULL; +#if !CYTHON_COMPILING_IN_PYPY + if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) + return iterable; +#endif + iter = PyObject_GetIter(iterable); + Py_DECREF(iterable); + return iter; + } + return PyObject_GetIter(iterable); +} +static CYTHON_INLINE int __Pyx_dict_iter_next( + PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, + PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { + PyObject* next_item; +#if !CYTHON_COMPILING_IN_PYPY + if (source_is_dict) { + PyObject *key, *value; + if (unlikely(orig_length != PyDict_Size(iter_obj))) { + PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); + return -1; + } + if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { + return 0; + } + if (pitem) { + PyObject* tuple = PyTuple_New(2); + if (unlikely(!tuple)) { + return -1; + } + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(tuple, 0, key); + PyTuple_SET_ITEM(tuple, 1, value); + *pitem = tuple; + } else { + if (pkey) { + Py_INCREF(key); + *pkey = key; + } + if (pvalue) { + Py_INCREF(value); + *pvalue = value; + } + } + return 1; + } else if (PyTuple_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyTuple_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else if (PyList_CheckExact(iter_obj)) { + Py_ssize_t pos = *ppos; + if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; + *ppos = pos + 1; + next_item = PyList_GET_ITEM(iter_obj, pos); + Py_INCREF(next_item); + } else +#endif + { + next_item = PyIter_Next(iter_obj); + if (unlikely(!next_item)) { + return __Pyx_IterFinish(); + } + } + if (pitem) { + *pitem = next_item; + } else if (pkey && pvalue) { + if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) + return -1; + } else if (pkey) { + *pkey = next_item; + } else { + *pvalue = next_item; + } + return 1; +} + +/* PyIntBinop */ + #if !CYTHON_COMPILING_IN_PYPY +static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_MAYBE_UNUSED_VAR(inplace); + CYTHON_UNUSED_VAR(zerodivision_check); + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long x; + long a = PyInt_AS_LONG(op1); + + x = (long)((unsigned long)a + (unsigned long)b); + if (likely((x^a) >= 0 || (x^b) >= 0)) + return PyInt_FromLong(x); + return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + const long b = intval; + long a, x; +#ifdef HAVE_LONG_LONG + const PY_LONG_LONG llb = intval; + PY_LONG_LONG lla, llx; +#endif + if (unlikely(__Pyx_PyLong_IsZero(op1))) { + return __Pyx_NewRef(op2); + } + if (likely(__Pyx_PyLong_IsCompact(op1))) { + a = __Pyx_PyLong_CompactValue(op1); + } else { + const digit* digits = __Pyx_PyLong_Digits(op1); + const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); + switch (size) { + case -2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 2: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 3: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case -4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + case 4: + if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); + break; + #ifdef HAVE_LONG_LONG + } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { + lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + goto long_long; + #endif + } + CYTHON_FALLTHROUGH; + default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + } + x = a + b; + return PyLong_FromLong(x); +#ifdef HAVE_LONG_LONG + long_long: + llx = lla + llb; + return PyLong_FromLongLong(llx); +#endif + + + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + double result; + + PyFPE_START_PROTECT("add", return NULL) + result = ((double)a) + (double)b; + PyFPE_END_PROTECT(result) + return PyFloat_FromDouble(result); + } + return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); +} +#endif + +/* PyIntCompare */ + static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { + CYTHON_MAYBE_UNUSED_VAR(intval); + CYTHON_UNUSED_VAR(inplace); + if (op1 == op2) { + return 1; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + return (a == b); + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); + const digit* digits = __Pyx_PyLong_Digits(op1); + if (intval == 0) { + return (__Pyx_PyLong_IsZero(op1) == 1); + } else if (intval < 0) { + if (__Pyx_PyLong_IsNonNeg(op1)) + return 0; + intval = -intval; + } else { + if (__Pyx_PyLong_IsNeg(op1)) + return 0; + } + 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)); + return (unequal == 0); + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; +#if CYTHON_COMPILING_IN_LIMITED_API + double a = __pyx_PyFloat_AsDouble(op1); +#else + double a = PyFloat_AS_DOUBLE(op1); +#endif + return ((double)a == (double)b); + } + return __Pyx_PyObject_IsTrueAndDecref( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* PyObjectCall2Args */ + static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args[3] = {NULL, arg1, arg2}; + return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +} + +/* PyObjectCallMethod1 */ + #if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) +static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { + PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); + Py_DECREF(method); + return result; +} +#endif +static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { +#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 + PyObject *args[2] = {obj, arg}; + (void) __Pyx_PyObject_GetMethod; + (void) __Pyx_PyObject_CallOneArg; + (void) __Pyx_PyObject_Call2Args; + return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); +#else + PyObject *method = NULL, *result; + int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); + if (likely(is_method)) { + result = __Pyx_PyObject_Call2Args(method, obj, arg); + Py_DECREF(method); + return result; + } + if (unlikely(!method)) return NULL; + return __Pyx__PyObject_CallMethod1(method, arg); +#endif +} + +/* append */ + static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) { + if (likely(PyList_CheckExact(L))) { + if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1; + } else { + PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x); + if (unlikely(!retval)) + return -1; + Py_DECREF(retval); + } + return 0; +} + +/* PyObject_GenericGetAttrNoDict */ + #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { + __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); + PyErr_Format(PyExc_AttributeError, +#if PY_MAJOR_VERSION >= 3 + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", + type_name, attr_name); +#else + "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", + type_name, PyString_AS_STRING(attr_name)); +#endif + __Pyx_DECREF_TypeName(type_name); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { + PyObject *descr; + PyTypeObject *tp = Py_TYPE(obj); + if (unlikely(!PyString_Check(attr_name))) { + return PyObject_GenericGetAttr(obj, attr_name); + } + assert(!tp->tp_dictoffset); + descr = _PyType_Lookup(tp, attr_name); + if (unlikely(!descr)) { + return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); + } + Py_INCREF(descr); + #if PY_MAJOR_VERSION < 3 + if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) + #endif + { + descrgetfunc f = Py_TYPE(descr)->tp_descr_get; + if (unlikely(f)) { + PyObject *res = f(descr, obj, (PyObject *)tp); + Py_DECREF(descr); + return res; + } + } + return descr; +} +#endif + +/* PyObject_GenericGetAttr */ + #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 +static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { + if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { + return PyObject_GenericGetAttr(obj, attr_name); + } + return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); +} +#endif + +/* FixUpExtensionType */ + #if CYTHON_USE_TYPE_SPECS +static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { +#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + CYTHON_UNUSED_VAR(spec); + CYTHON_UNUSED_VAR(type); +#else + const PyType_Slot *slot = spec->slots; + while (slot && slot->slot && slot->slot != Py_tp_members) + slot++; + if (slot && slot->slot == Py_tp_members) { + int changed = 0; +#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) + const +#endif + PyMemberDef *memb = (PyMemberDef*) slot->pfunc; + while (memb && memb->name) { + if (memb->name[0] == '_' && memb->name[1] == '_') { +#if PY_VERSION_HEX < 0x030900b1 + if (strcmp(memb->name, "__weaklistoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_weaklistoffset = memb->offset; + changed = 1; + } + else if (strcmp(memb->name, "__dictoffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); + type->tp_dictoffset = memb->offset; + changed = 1; + } +#if CYTHON_METH_FASTCALL + else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { + assert(memb->type == T_PYSSIZET); + assert(memb->flags == READONLY); +#if PY_VERSION_HEX >= 0x030800b4 + type->tp_vectorcall_offset = memb->offset; +#else + type->tp_print = (printfunc) memb->offset; +#endif + changed = 1; + } +#endif +#else + if ((0)); +#endif +#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON + else if (strcmp(memb->name, "__module__") == 0) { + PyObject *descr; + assert(memb->type == T_OBJECT); + assert(memb->flags == 0 || memb->flags == READONLY); + descr = PyDescr_NewMember(type, memb); + if (unlikely(!descr)) + return -1; + if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { + Py_DECREF(descr); + return -1; + } + Py_DECREF(descr); + changed = 1; + } +#endif + } + memb++; + } + if (changed) + PyType_Modified(type); + } +#endif + return 0; +} +#endif + +/* ValidateBasesTuple */ + #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS +static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { + Py_ssize_t i, n; +#if CYTHON_ASSUME_SAFE_MACROS + n = PyTuple_GET_SIZE(bases); +#else + n = PyTuple_Size(bases); + if (n < 0) return -1; +#endif + for (i = 1; i < n; i++) + { +#if CYTHON_AVOID_BORROWED_REFS + PyObject *b0 = PySequence_GetItem(bases, i); + if (!b0) return -1; +#elif CYTHON_ASSUME_SAFE_MACROS + PyObject *b0 = PyTuple_GET_ITEM(bases, i); +#else + PyObject *b0 = PyTuple_GetItem(bases, i); + if (!b0) return -1; +#endif + PyTypeObject *b; +#if PY_MAJOR_VERSION < 3 + if (PyClass_Check(b0)) + { + PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", + PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif + return -1; + } +#endif + b = (PyTypeObject*) b0; + if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); + __Pyx_DECREF_TypeName(b_name); +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); #endif - iter = PyObject_GetIter(iterable); - Py_DECREF(iterable); - return iter; - } - return PyObject_GetIter(iterable); -} -static CYTHON_INLINE int __Pyx_dict_iter_next( - PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, - PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { - PyObject* next_item; -#if !CYTHON_COMPILING_IN_PYPY - if (source_is_dict) { - PyObject *key, *value; - if (unlikely(orig_length != PyDict_Size(iter_obj))) { - PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); return -1; } - if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { - return 0; - } - if (pitem) { - PyObject* tuple = PyTuple_New(2); - if (unlikely(!tuple)) { + if (dictoffset == 0) + { + Py_ssize_t b_dictoffset = 0; +#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY + b_dictoffset = b->tp_dictoffset; +#else + PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); + if (!py_b_dictoffset) goto dictoffset_return; + b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); + Py_DECREF(py_b_dictoffset); + if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; +#endif + if (b_dictoffset) { + { + __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); + PyErr_Format(PyExc_TypeError, + "extension type '%.200s' has no __dict__ slot, " + "but base type '" __Pyx_FMT_TYPENAME "' has: " + "either add 'cdef dict __dict__' to the extension type " + "or add '__slots__ = [...]' to the base type", + type_name, b_name); + __Pyx_DECREF_TypeName(b_name); + } +#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) + dictoffset_return: +#endif +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); +#endif return -1; } - Py_INCREF(key); - Py_INCREF(value); - PyTuple_SET_ITEM(tuple, 0, key); - PyTuple_SET_ITEM(tuple, 1, value); - *pitem = tuple; - } else { - if (pkey) { - Py_INCREF(key); - *pkey = key; - } - if (pvalue) { - Py_INCREF(value); - *pvalue = value; - } } - return 1; - } else if (PyTuple_CheckExact(iter_obj)) { - Py_ssize_t pos = *ppos; - if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; - *ppos = pos + 1; - next_item = PyTuple_GET_ITEM(iter_obj, pos); - Py_INCREF(next_item); - } else if (PyList_CheckExact(iter_obj)) { - Py_ssize_t pos = *ppos; - if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; - *ppos = pos + 1; - next_item = PyList_GET_ITEM(iter_obj, pos); - Py_INCREF(next_item); - } else +#if CYTHON_AVOID_BORROWED_REFS + Py_DECREF(b0); #endif - { - next_item = PyIter_Next(iter_obj); - if (unlikely(!next_item)) { - return __Pyx_IterFinish(); - } - } - if (pitem) { - *pitem = next_item; - } else if (pkey && pvalue) { - if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) - return -1; - } else if (pkey) { - *pkey = next_item; - } else { - *pvalue = next_item; } - return 1; + return 0; } +#endif -/* UnpackUnboundCMethod */ - static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) { - PyObject *result; - PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args)); - if (unlikely(!selfless_args)) return NULL; - result = PyObject_Call(method, selfless_args, kwargs); - Py_DECREF(selfless_args); - return result; -} -static PyMethodDef __Pyx_UnboundCMethod_Def = { - "CythonUnboundCMethod", - __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall), - METH_VARARGS | METH_KEYWORDS, - NULL -}; -static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { - PyObject *method; - method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); - if (unlikely(!method)) +/* PyType_Ready */ + static int __Pyx_PyType_Ready(PyTypeObject *t) { +#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) + (void)__Pyx_PyObject_CallMethod0; +#if CYTHON_USE_TYPE_SPECS + (void)__Pyx_validate_bases_tuple; +#endif + return PyType_Ready(t); +#else + int r; + PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); + if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) return -1; - target->method = method; -#if CYTHON_COMPILING_IN_CPYTHON - #if PY_MAJOR_VERSION >= 3 - if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + { + int gc_was_enabled; + #if PY_VERSION_HEX >= 0x030A00b1 + gc_was_enabled = PyGC_Disable(); + (void)__Pyx_PyObject_CallMethod0; #else - if (likely(!__Pyx_CyOrPyCFunction_Check(method))) + PyObject *ret, *py_status; + PyObject *gc = NULL; + #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) + gc = PyImport_GetModule(__pyx_kp_u_gc); + #endif + if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); + if (unlikely(!gc)) return -1; + py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); + if (unlikely(!py_status)) { + Py_DECREF(gc); + return -1; + } + gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); + Py_DECREF(py_status); + if (gc_was_enabled > 0) { + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); + if (unlikely(!ret)) { + Py_DECREF(gc); + return -1; + } + Py_DECREF(ret); + } else if (unlikely(gc_was_enabled == -1)) { + Py_DECREF(gc); + return -1; + } #endif - { - PyMethodDescrObject *descr = (PyMethodDescrObject*) method; - target->func = descr->d_method->ml_meth; - target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); - } else + t->tp_flags |= Py_TPFLAGS_HEAPTYPE; +#if PY_VERSION_HEX >= 0x030A0000 + t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; #endif -#if CYTHON_COMPILING_IN_PYPY #else - if (PyCFunction_Check(method)) + (void)__Pyx_PyObject_CallMethod0; #endif - { - PyObject *self; - int self_found; -#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY - self = PyObject_GetAttrString(method, "__self__"); - if (!self) { - PyErr_Clear(); + r = PyType_Ready(t); +#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) + t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; + #if PY_VERSION_HEX >= 0x030A00b1 + if (gc_was_enabled) + PyGC_Enable(); + #else + if (gc_was_enabled) { + PyObject *tp, *v, *tb; + PyErr_Fetch(&tp, &v, &tb); + ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); + if (likely(ret || r == -1)) { + Py_XDECREF(ret); + PyErr_Restore(tp, v, tb); + } else { + Py_XDECREF(tp); + Py_XDECREF(v); + Py_XDECREF(tb); + r = -1; + } } -#else - self = PyCFunction_GET_SELF(method); + Py_DECREF(gc); + #endif + } #endif - self_found = (self && self != Py_None); -#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY - Py_XDECREF(self); + return r; #endif - if (self_found) { - PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method); - if (unlikely(!unbound_method)) return -1; - Py_DECREF(method); - target->method = unbound_method; - } - } - return 0; } -/* CallUnboundCMethod1 */ - #if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { - if (likely(cfunc->func)) { - int flag = cfunc->flag; - if (flag == METH_O) { - return (*(cfunc->func))(self, arg); - } else if ((PY_VERSION_HEX >= 0x030600B1) && flag == METH_FASTCALL) { - #if PY_VERSION_HEX >= 0x030700A0 - return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); - #else - return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); - #endif - } else if ((PY_VERSION_HEX >= 0x030700A0) && flag == (METH_FASTCALL | METH_KEYWORDS)) { - return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); - } - } - return __Pyx__CallUnboundCMethod1(cfunc, self, arg); -} -#endif -static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ - PyObject *args, *result = NULL; - if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; -#if CYTHON_COMPILING_IN_CPYTHON - if (cfunc->func && (cfunc->flag & METH_VARARGS)) { - args = PyTuple_New(1); - if (unlikely(!args)) goto bad; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - if (cfunc->flag & METH_KEYWORDS) - result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); - else - result = (*cfunc->func)(self, args); - } else { - args = PyTuple_New(2); - if (unlikely(!args)) goto bad; - Py_INCREF(self); - PyTuple_SET_ITEM(args, 0, self); - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 1, arg); - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); - } +/* SetVTable */ + static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) { + PyObject *ob = PyCapsule_New(vtable, 0, 0); + if (unlikely(!ob)) + goto bad; +#if CYTHON_COMPILING_IN_LIMITED_API + if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_n_s_pyx_vtable, ob) < 0)) #else - args = PyTuple_Pack(2, self, arg); - if (unlikely(!args)) goto bad; - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); + if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_n_s_pyx_vtable, ob) < 0)) #endif + goto bad; + Py_DECREF(ob); + return 0; bad: - Py_XDECREF(args); - return result; + Py_XDECREF(ob); + return -1; } -/* PyIntBinop */ - #if !CYTHON_COMPILING_IN_PYPY -static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) { - CYTHON_MAYBE_UNUSED_VAR(intval); - CYTHON_MAYBE_UNUSED_VAR(inplace); - CYTHON_UNUSED_VAR(zerodivision_check); - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op1))) { - const long b = intval; - long x; - long a = PyInt_AS_LONG(op1); - - x = (long)((unsigned long)a + (unsigned long)b); - if (likely((x^a) >= 0 || (x^b) >= 0)) - return PyInt_FromLong(x); - return PyLong_Type.tp_as_number->nb_add(op1, op2); - } - #endif - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op1))) { - const long b = intval; - long a, x; -#ifdef HAVE_LONG_LONG - const PY_LONG_LONG llb = intval; - PY_LONG_LONG lla, llx; +/* GetVTable */ + static void* __Pyx_GetVtable(PyTypeObject *type) { + void* ptr; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_n_s_pyx_vtable); +#else + PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_n_s_pyx_vtable); #endif - if (unlikely(__Pyx_PyLong_IsZero(op1))) { - return __Pyx_NewRef(op2); + if (!ob) + goto bad; + ptr = PyCapsule_GetPointer(ob, 0); + 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; +} + +/* MergeVTables */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_MergeVtables(PyTypeObject *type) { + int i; + void** base_vtables; + __Pyx_TypeName tp_base_name; + __Pyx_TypeName base_name; + void* unknown = (void*)-1; + PyObject* bases = type->tp_bases; + int base_depth = 0; + { + PyTypeObject* base = type->tp_base; + while (base) { + base_depth += 1; + base = base->tp_base; } - if (likely(__Pyx_PyLong_IsCompact(op1))) { - a = __Pyx_PyLong_CompactValue(op1); - } else { - const digit* digits = __Pyx_PyLong_Digits(op1); - const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(op1); - switch (size) { - case -2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; - #endif - } - CYTHON_FALLTHROUGH; - case 2: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; - #endif - } - CYTHON_FALLTHROUGH; - case -3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; - #endif - } - CYTHON_FALLTHROUGH; - case 3: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; - #endif - } - CYTHON_FALLTHROUGH; - case -4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; - #endif - } - CYTHON_FALLTHROUGH; - case 4: - if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - break; - #ifdef HAVE_LONG_LONG - } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) { - lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); - goto long_long; - #endif - } - CYTHON_FALLTHROUGH; - default: return PyLong_Type.tp_as_number->nb_add(op1, op2); + } + base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1)); + base_vtables[0] = unknown; + for (i = 1; i < PyTuple_GET_SIZE(bases); i++) { + void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i))); + if (base_vtable != NULL) { + int j; + PyTypeObject* base = type->tp_base; + for (j = 0; j < base_depth; j++) { + if (base_vtables[j] == unknown) { + base_vtables[j] = __Pyx_GetVtable(base); + base_vtables[j + 1] = unknown; + } + if (base_vtables[j] == base_vtable) { + break; + } else if (base_vtables[j] == NULL) { + goto bad; + } + base = base->tp_base; } } - x = a + b; - return PyLong_FromLong(x); -#ifdef HAVE_LONG_LONG - long_long: - llx = lla + llb; - return PyLong_FromLongLong(llx); + } + PyErr_Clear(); + free(base_vtables); + return 0; +bad: + tp_base_name = __Pyx_PyType_GetName(type->tp_base); + base_name = __Pyx_PyType_GetName((PyTypeObject*)PyTuple_GET_ITEM(bases, i)); + PyErr_Format(PyExc_TypeError, + "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name); + __Pyx_DECREF_TypeName(tp_base_name); + __Pyx_DECREF_TypeName(base_name); + free(base_vtables); + return -1; +} +#endif + +/* SetupReduce */ + #if !CYTHON_COMPILING_IN_LIMITED_API +static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { + int ret; + PyObject *name_attr; + name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_n_s_name_2); + if (likely(name_attr)) { + ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); + } else { + ret = -1; + } + if (unlikely(ret < 0)) { + PyErr_Clear(); + ret = 0; + } + Py_XDECREF(name_attr); + return ret; +} +static int __Pyx_setup_reduce(PyObject* type_obj) { + int ret = 0; + PyObject *object_reduce = NULL; + PyObject *object_getstate = NULL; + PyObject *object_reduce_ex = NULL; + PyObject *reduce = NULL; + PyObject *reduce_ex = NULL; + PyObject *reduce_cython = NULL; + PyObject *setstate = NULL; + PyObject *setstate_cython = NULL; + PyObject *getstate = NULL; +#if CYTHON_USE_PYTYPE_LOOKUP + getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate); +#else + getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate); + if (!getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } +#endif + if (getstate) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate); +#else + object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate); + if (!object_getstate && PyErr_Occurred()) { + goto __PYX_BAD; + } #endif - - + if (object_getstate != getstate) { + goto __PYX_GOOD; + } } - #endif - if (PyFloat_CheckExact(op1)) { - const long b = intval; -#if CYTHON_COMPILING_IN_LIMITED_API - double a = __pyx_PyFloat_AsDouble(op1); +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; #else - double a = PyFloat_AS_DOUBLE(op1); + object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; #endif - double result; - - PyFPE_START_PROTECT("add", return NULL) - result = ((double)a) + (double)b; - PyFPE_END_PROTECT(result) - return PyFloat_FromDouble(result); - } - return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2); -} + reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; + if (reduce_ex == object_reduce_ex) { +#if CYTHON_USE_PYTYPE_LOOKUP + object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#else + object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; #endif - -/* PyIntCompare */ - static CYTHON_INLINE int __Pyx_PyInt_BoolEqObjC(PyObject *op1, PyObject *op2, long intval, long inplace) { - CYTHON_MAYBE_UNUSED_VAR(intval); - CYTHON_UNUSED_VAR(inplace); - if (op1 == op2) { - return 1; + reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; + if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { + reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); + if (likely(reduce_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (reduce == object_reduce || PyErr_Occurred()) { + goto __PYX_BAD; + } + setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate); + if (!setstate) PyErr_Clear(); + if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { + setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); + if (likely(setstate_cython)) { + ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; + } else if (!setstate || PyErr_Occurred()) { + goto __PYX_BAD; + } + } + PyType_Modified((PyTypeObject*)type_obj); + } } - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op1))) { - const long b = intval; - long a = PyInt_AS_LONG(op1); - return (a == b); + goto __PYX_GOOD; +__PYX_BAD: + if (!PyErr_Occurred()) { + __Pyx_TypeName type_obj_name = + __Pyx_PyType_GetName((PyTypeObject*)type_obj); + PyErr_Format(PyExc_RuntimeError, + "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name); + __Pyx_DECREF_TypeName(type_obj_name); } - #endif - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op1))) { - int unequal; - unsigned long uintval; - Py_ssize_t size = __Pyx_PyLong_DigitCount(op1); - const digit* digits = __Pyx_PyLong_Digits(op1); - if (intval == 0) { - return (__Pyx_PyLong_IsZero(op1) == 1); - } else if (intval < 0) { - if (__Pyx_PyLong_IsNonNeg(op1)) - return 0; - intval = -intval; - } else { - if (__Pyx_PyLong_IsNeg(op1)) - return 0; - } - 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 + ret = -1; +__PYX_GOOD: +#if !CYTHON_USE_PYTYPE_LOOKUP + Py_XDECREF(object_reduce); + Py_XDECREF(object_reduce_ex); + Py_XDECREF(object_getstate); + Py_XDECREF(getstate); #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 + Py_XDECREF(reduce); + Py_XDECREF(reduce_ex); + Py_XDECREF(reduce_cython); + Py_XDECREF(setstate); + Py_XDECREF(setstate_cython); + return ret; +} #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 + +/* TypeImport */ + #ifndef __PYX_HAVE_RT_ImportType_3_0_11 +#define __PYX_HAVE_RT_ImportType_3_0_11 +static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject *module, const char *module_name, const char *class_name, + size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; + Py_ssize_t itemsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + PyObject *py_itemsize; #endif - unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); - return (unequal == 0); + 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; } - #endif - if (PyFloat_CheckExact(op1)) { - const long b = intval; -#if CYTHON_COMPILING_IN_LIMITED_API - double a = __pyx_PyFloat_AsDouble(op1); +#if !CYTHON_COMPILING_IN_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; + itemsize = ((PyTypeObject *)result)->tp_itemsize; #else - double a = PyFloat_AS_DOUBLE(op1); + 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; + py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); + if (!py_itemsize) + goto bad; + itemsize = PyLong_AsSsize_t(py_itemsize); + Py_DECREF(py_itemsize); + py_itemsize = 0; + if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; #endif - return ((double)a == (double)b); - } - return __Pyx_PyObject_IsTrueAndDecref( - PyObject_RichCompare(op1, op2, Py_EQ)); -} - -/* decode_c_bytes */ - static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( - const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - if (unlikely((start < 0) | (stop < 0))) { - if (start < 0) { - start += length; - if (start < 0) - start = 0; + if (itemsize) { + if (size % alignment) { + alignment = size % alignment; } - if (stop < 0) - stop += length; + if (itemsize < (Py_ssize_t)alignment) + itemsize = (Py_ssize_t)alignment; } - if (stop > length) - stop = length; - if (unlikely(stop <= start)) - return __Pyx_NewRef(__pyx_empty_unicode); - length = stop - start; - cstring += start; - if (decode_func) { - return decode_func(cstring, length, errors); - } else { - return PyUnicode_Decode(cstring, length, encoding, errors); + if ((size_t)(basicsize + itemsize) < 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+itemsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_11 && + ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd-%zd from PyObject", + module_name, class_name, size, basicsize, basicsize+itemsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_11 && (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 -/* PyObjectCall2Args */ - static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args[3] = {NULL, arg1, arg2}; - return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET); +/* FetchSharedCythonModule */ + static PyObject *__Pyx_FetchSharedCythonABIModule(void) { + return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); } -/* PyObjectCallMethod1 */ - #if !(CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2) -static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { - PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); - Py_DECREF(method); - return result; -} -#endif -static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { -#if CYTHON_VECTORCALL && __PYX_LIMITED_VERSION_HEX >= 0x030C00A2 - PyObject *args[2] = {obj, arg}; - (void) __Pyx_PyObject_GetMethod; - (void) __Pyx_PyObject_CallOneArg; - (void) __Pyx_PyObject_Call2Args; - return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); -#else - PyObject *method = NULL, *result; - int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); - if (likely(is_method)) { - result = __Pyx_PyObject_Call2Args(method, obj, arg); - Py_DECREF(method); - return result; +/* FetchCommonType */ + static int __Pyx_VerifyCachedType(PyObject *cached_type, + const char *name, + Py_ssize_t basicsize, + Py_ssize_t expected_basicsize) { + if (!PyType_Check(cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", name); + return -1; } - if (unlikely(!method)) return NULL; - return __Pyx__PyObject_CallMethod1(method, arg); -#endif -} - -/* append */ - static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) { - if (likely(PyList_CheckExact(L))) { - if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1; - } else { - PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x); - if (unlikely(!retval)) - return -1; - Py_DECREF(retval); + if (basicsize != expected_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + name); + return -1; } return 0; } - -/* PyObject_GenericGetAttrNoDict */ - #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { - __Pyx_TypeName type_name = __Pyx_PyType_GetName(tp); - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'", - type_name, attr_name); -#else - "'" __Pyx_FMT_TYPENAME "' object has no attribute '%.400s'", - type_name, PyString_AS_STRING(attr_name)); -#endif - __Pyx_DECREF_TypeName(type_name); - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { - PyObject *descr; - PyTypeObject *tp = Py_TYPE(obj); - if (unlikely(!PyString_Check(attr_name))) { - return PyObject_GenericGetAttr(obj, attr_name); - } - assert(!tp->tp_dictoffset); - descr = _PyType_Lookup(tp, attr_name); - if (unlikely(!descr)) { - return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); - } - Py_INCREF(descr); - #if PY_MAJOR_VERSION < 3 - if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) - #endif - { - descrgetfunc f = Py_TYPE(descr)->tp_descr_get; - if (unlikely(f)) { - PyObject *res = f(descr, obj, (PyObject *)tp); - Py_DECREF(descr); - return res; +#if !CYTHON_USE_TYPE_SPECS +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* abi_module; + const char* object_name; + PyTypeObject *cached_type = NULL; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + object_name = strrchr(type->tp_name, '.'); + object_name = object_name ? object_name+1 : type->tp_name; + cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + if (__Pyx_VerifyCachedType( + (PyObject *)cached_type, + object_name, + cached_type->tp_basicsize, + type->tp_basicsize) < 0) { + goto bad; } + goto done; } - return descr; + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; +done: + Py_DECREF(abi_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; } +#else +static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { + PyObject *abi_module, *cached_type = NULL; + const char* object_name = strrchr(spec->name, '.'); + object_name = object_name ? object_name+1 : spec->name; + abi_module = __Pyx_FetchSharedCythonABIModule(); + if (!abi_module) return NULL; + cached_type = PyObject_GetAttrString(abi_module, object_name); + if (cached_type) { + Py_ssize_t basicsize; +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *py_basicsize; + py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); + if (unlikely(!py_basicsize)) goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; +#else + basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; #endif - -/* PyObject_GenericGetAttr */ - #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { - if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { - return PyObject_GenericGetAttr(obj, attr_name); + if (__Pyx_VerifyCachedType( + cached_type, + object_name, + basicsize, + spec->basicsize) < 0) { + goto bad; + } + goto done; } - return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + CYTHON_UNUSED_VAR(module); + cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); + if (unlikely(!cached_type)) goto bad; + if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; + if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; +done: + Py_DECREF(abi_module); + assert(cached_type == NULL || PyType_Check(cached_type)); + return (PyTypeObject *) cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; } #endif -/* FixUpExtensionType */ - #if CYTHON_USE_TYPE_SPECS -static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) { -#if PY_VERSION_HEX > 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API - CYTHON_UNUSED_VAR(spec); - CYTHON_UNUSED_VAR(type); -#else - const PyType_Slot *slot = spec->slots; - while (slot && slot->slot && slot->slot != Py_tp_members) - slot++; - if (slot && slot->slot == Py_tp_members) { - int changed = 0; -#if !(PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON) - const -#endif - PyMemberDef *memb = (PyMemberDef*) slot->pfunc; - while (memb && memb->name) { - if (memb->name[0] == '_' && memb->name[1] == '_') { -#if PY_VERSION_HEX < 0x030900b1 - if (strcmp(memb->name, "__weaklistoffset__") == 0) { - assert(memb->type == T_PYSSIZET); - assert(memb->flags == READONLY); - type->tp_weaklistoffset = memb->offset; - changed = 1; - } - else if (strcmp(memb->name, "__dictoffset__") == 0) { - assert(memb->type == T_PYSSIZET); - assert(memb->flags == READONLY); - type->tp_dictoffset = memb->offset; - changed = 1; - } -#if CYTHON_METH_FASTCALL - else if (strcmp(memb->name, "__vectorcalloffset__") == 0) { - assert(memb->type == T_PYSSIZET); - assert(memb->flags == READONLY); -#if PY_VERSION_HEX >= 0x030800b4 - type->tp_vectorcall_offset = memb->offset; -#else - type->tp_print = (printfunc) memb->offset; -#endif - changed = 1; - } -#endif -#else - if ((0)); -#endif -#if PY_VERSION_HEX <= 0x030900b1 && CYTHON_COMPILING_IN_CPYTHON - else if (strcmp(memb->name, "__module__") == 0) { - PyObject *descr; - assert(memb->type == T_OBJECT); - assert(memb->flags == 0 || memb->flags == READONLY); - descr = PyDescr_NewMember(type, memb); - if (unlikely(!descr)) - return -1; - if (unlikely(PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr) < 0)) { - Py_DECREF(descr); - return -1; - } - Py_DECREF(descr); - changed = 1; - } -#endif - } - memb++; - } - if (changed) - PyType_Modified(type); +/* PyVectorcallFastCallDict */ + #if CYTHON_METH_FASTCALL +static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + PyObject *res = NULL; + PyObject *kwnames; + PyObject **newargs; + PyObject **kwvalues; + Py_ssize_t i, pos; + size_t j; + PyObject *key, *value; + unsigned long keys_are_strings; + Py_ssize_t nkw = PyDict_GET_SIZE(kw); + newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); + if (unlikely(newargs == NULL)) { + PyErr_NoMemory(); + return NULL; + } + for (j = 0; j < nargs; j++) newargs[j] = args[j]; + kwnames = PyTuple_New(nkw); + if (unlikely(kwnames == NULL)) { + PyMem_Free(newargs); + return NULL; } -#endif - return 0; + kwvalues = newargs + nargs; + pos = i = 0; + keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; + while (PyDict_Next(kw, &pos, &key, &value)) { + keys_are_strings &= Py_TYPE(key)->tp_flags; + Py_INCREF(key); + Py_INCREF(value); + PyTuple_SET_ITEM(kwnames, i, key); + kwvalues[i] = value; + i++; + } + if (unlikely(!keys_are_strings)) { + PyErr_SetString(PyExc_TypeError, "keywords must be strings"); + goto cleanup; + } + res = vc(func, newargs, nargs, kwnames); +cleanup: + Py_DECREF(kwnames); + for (i = 0; i < nkw; i++) + Py_DECREF(kwvalues[i]); + PyMem_Free(newargs); + return res; +} +static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +{ + if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { + return vc(func, args, nargs, NULL); + } + return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); } #endif -/* ValidateBasesTuple */ - #if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS -static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) { - Py_ssize_t i, n; -#if CYTHON_ASSUME_SAFE_MACROS - n = PyTuple_GET_SIZE(bases); +/* CythonFunctionShared */ + #if CYTHON_COMPILING_IN_LIMITED_API +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + if (__Pyx_CyFunction_Check(func)) { + return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; + } else if (PyCFunction_Check(func)) { + return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + } + return 0; +} #else - n = PyTuple_Size(bases); - if (n < 0) return -1; +static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { + return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; +} #endif - for (i = 1; i < n; i++) - { -#if CYTHON_AVOID_BORROWED_REFS - PyObject *b0 = PySequence_GetItem(bases, i); - if (!b0) return -1; -#elif CYTHON_ASSUME_SAFE_MACROS - PyObject *b0 = PyTuple_GET_ITEM(bases, i); +static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + __Pyx_Py_XDECREF_SET( + __Pyx_CyFunction_GetClassObj(f), + ((classobj) ? __Pyx_NewRef(classobj) : NULL)); #else - PyObject *b0 = PyTuple_GetItem(bases, i); - if (!b0) return -1; -#endif - PyTypeObject *b; -#if PY_MAJOR_VERSION < 3 - if (PyClass_Check(b0)) - { - PyErr_Format(PyExc_TypeError, "base class '%.200s' is an old-style class", - PyString_AS_STRING(((PyClassObject*)b0)->cl_name)); -#if CYTHON_AVOID_BORROWED_REFS - Py_DECREF(b0); -#endif - return -1; - } -#endif - b = (PyTypeObject*) b0; - if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE)) - { - __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); - PyErr_Format(PyExc_TypeError, - "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name); - __Pyx_DECREF_TypeName(b_name); -#if CYTHON_AVOID_BORROWED_REFS - Py_DECREF(b0); + __Pyx_Py_XDECREF_SET( + ((PyCMethodObject *) (f))->mm_class, + (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); #endif - return -1; - } - if (dictoffset == 0) - { - Py_ssize_t b_dictoffset = 0; -#if CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY - b_dictoffset = b->tp_dictoffset; +} +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) +{ + CYTHON_UNUSED_VAR(closure); + if (unlikely(op->func_doc == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); + if (unlikely(!op->func_doc)) return NULL; #else - PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__"); - if (!py_b_dictoffset) goto dictoffset_return; - b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset); - Py_DECREF(py_b_dictoffset); - if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return; -#endif - if (b_dictoffset) { - { - __Pyx_TypeName b_name = __Pyx_PyType_GetName(b); - PyErr_Format(PyExc_TypeError, - "extension type '%.200s' has no __dict__ slot, " - "but base type '" __Pyx_FMT_TYPENAME "' has: " - "either add 'cdef dict __dict__' to the extension type " - "or add '__slots__ = [...]' to the base type", - type_name, b_name); - __Pyx_DECREF_TypeName(b_name); - } -#if !(CYTHON_USE_TYPE_SLOTS || CYTHON_COMPILING_IN_PYPY) - dictoffset_return: -#endif -#if CYTHON_AVOID_BORROWED_REFS - Py_DECREF(b0); + if (((PyCFunctionObject*)op)->m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); #endif - return -1; - } + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; } -#if CYTHON_AVOID_BORROWED_REFS - Py_DECREF(b0); #endif } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_doc, value); return 0; } -#endif - -/* PyType_Ready */ - static int __Pyx_PyType_Ready(PyTypeObject *t) { -#if CYTHON_USE_TYPE_SPECS || !(CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API) || defined(PYSTON_MAJOR_VERSION) - (void)__Pyx_PyObject_CallMethod0; -#if CYTHON_USE_TYPE_SPECS - (void)__Pyx_validate_bases_tuple; -#endif - return PyType_Ready(t); -#else - int r; - PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*); - if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1)) - return -1; -#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) - { - int gc_was_enabled; - #if PY_VERSION_HEX >= 0x030A00b1 - gc_was_enabled = PyGC_Disable(); - (void)__Pyx_PyObject_CallMethod0; - #else - PyObject *ret, *py_status; - PyObject *gc = NULL; - #if PY_VERSION_HEX >= 0x030700a1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) - gc = PyImport_GetModule(__pyx_kp_u_gc); - #endif - if (unlikely(!gc)) gc = PyImport_Import(__pyx_kp_u_gc); - if (unlikely(!gc)) return -1; - py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_isenabled); - if (unlikely(!py_status)) { - Py_DECREF(gc); - return -1; - } - gc_was_enabled = __Pyx_PyObject_IsTrue(py_status); - Py_DECREF(py_status); - if (gc_was_enabled > 0) { - ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_disable); - if (unlikely(!ret)) { - Py_DECREF(gc); - return -1; - } - Py_DECREF(ret); - } else if (unlikely(gc_was_enabled == -1)) { - Py_DECREF(gc); - return -1; - } - #endif - t->tp_flags |= Py_TPFLAGS_HEAPTYPE; -#if PY_VERSION_HEX >= 0x030A0000 - t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE; -#endif +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + if (unlikely(op->func_name == NULL)) { +#if CYTHON_COMPILING_IN_LIMITED_API + op->func_name = PyObject_GetAttrString(op->func, "__name__"); +#elif PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); #else - (void)__Pyx_PyObject_CallMethod0; + op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); #endif - r = PyType_Ready(t); -#if PY_VERSION_HEX >= 0x03050000 && !defined(PYSTON_MAJOR_VERSION) - t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE; - #if PY_VERSION_HEX >= 0x030A00b1 - if (gc_was_enabled) - PyGC_Enable(); - #else - if (gc_was_enabled) { - PyObject *tp, *v, *tb; - PyErr_Fetch(&tp, &v, &tb); - ret = __Pyx_PyObject_CallMethod0(gc, __pyx_kp_u_enable); - if (likely(ret || r == -1)) { - Py_XDECREF(ret); - PyErr_Restore(tp, v, tb); - } else { - Py_XDECREF(tp); - Py_XDECREF(v); - Py_XDECREF(tb); - r = -1; - } - } - Py_DECREF(gc); - #endif + if (unlikely(op->func_name == NULL)) + return NULL; } -#endif - return r; -#endif + Py_INCREF(op->func_name); + return op->func_name; } - -/* SetVTable */ - static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) { - PyObject *ob = PyCapsule_New(vtable, 0, 0); - if (unlikely(!ob)) - goto bad; -#if CYTHON_COMPILING_IN_LIMITED_API - if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_n_s_pyx_vtable, ob) < 0)) +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) #else - if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_n_s_pyx_vtable, ob) < 0)) + if (unlikely(value == NULL || !PyString_Check(value))) #endif - goto bad; - Py_DECREF(ob); + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_name, value); return 0; -bad: - Py_XDECREF(ob); - return -1; } - -/* GetVTable */ - static void* __Pyx_GetVtable(PyTypeObject *type) { - void* ptr; -#if CYTHON_COMPILING_IN_LIMITED_API - PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_n_s_pyx_vtable); +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +{ + CYTHON_UNUSED_VAR(context); +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) #else - PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_n_s_pyx_vtable); + if (unlikely(value == NULL || !PyString_Check(value))) #endif - if (!ob) - goto bad; - ptr = PyCapsule_GetPointer(ob, 0); - 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; -} - -/* MergeVTables */ - #if !CYTHON_COMPILING_IN_LIMITED_API -static int __Pyx_MergeVtables(PyTypeObject *type) { - int i; - void** base_vtables; - __Pyx_TypeName tp_base_name; - __Pyx_TypeName base_name; - void* unknown = (void*)-1; - PyObject* bases = type->tp_bases; - int base_depth = 0; { - PyTypeObject* base = type->tp_base; - while (base) { - base_depth += 1; - base = base->tp_base; - } + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; } - base_vtables = (void**) malloc(sizeof(void*) * (size_t)(base_depth + 1)); - base_vtables[0] = unknown; - for (i = 1; i < PyTuple_GET_SIZE(bases); i++) { - void* base_vtable = __Pyx_GetVtable(((PyTypeObject*)PyTuple_GET_ITEM(bases, i))); - if (base_vtable != NULL) { - int j; - PyTypeObject* base = type->tp_base; - for (j = 0; j < base_depth; j++) { - if (base_vtables[j] == unknown) { - base_vtables[j] = __Pyx_GetVtable(base); - base_vtables[j + 1] = unknown; - } - if (base_vtables[j] == base_vtable) { - break; - } else if (base_vtables[j] == NULL) { - goto bad; - } - base = base->tp_base; - } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_qualname, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(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, void *context) +{ + CYTHON_UNUSED_VAR(context); + 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; + } + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->func_dict, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(context); + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) +{ + CYTHON_UNUSED_VAR(op); + CYTHON_UNUSED_VAR(context); + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + CYTHON_UNUSED_VAR(context); + 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 = __Pyx_PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = __Pyx_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, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_tuple; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; } } - PyErr_Clear(); - free(base_vtables); + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value) { + value = Py_None; + } else if (unlikely(value != Py_None && !PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " + "currently affect the values used in function calls", 1); + Py_INCREF(value); + __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); return 0; -bad: - tp_base_name = __Pyx_PyType_GetName(type->tp_base); - base_name = __Pyx_PyType_GetName((PyTypeObject*)PyTuple_GET_ITEM(bases, i)); - PyErr_Format(PyExc_TypeError, - "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name); - __Pyx_DECREF_TypeName(tp_base_name); - __Pyx_DECREF_TypeName(base_name); - free(base_vtables); - return -1; } -#endif - -/* SetupReduce */ - #if !CYTHON_COMPILING_IN_LIMITED_API -static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { - int ret; - PyObject *name_attr; - name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_n_s_name_2); - if (likely(name_attr)) { - ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); - } else { - ret = -1; - } - if (unlikely(ret < 0)) { - PyErr_Clear(); - ret = 0; - } - Py_XDECREF(name_attr); - return ret; +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->defaults_kwdict; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + if (op->defaults_getter) { + if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; } -static int __Pyx_setup_reduce(PyObject* type_obj) { - int ret = 0; - PyObject *object_reduce = NULL; - PyObject *object_getstate = NULL; - PyObject *object_reduce_ex = NULL; - PyObject *reduce = NULL; - PyObject *reduce_ex = NULL; - PyObject *reduce_cython = NULL; - PyObject *setstate = NULL; - PyObject *setstate_cython = NULL; - PyObject *getstate = NULL; -#if CYTHON_USE_PYTYPE_LOOKUP - getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate); -#else - getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate); - if (!getstate && PyErr_Occurred()) { - goto __PYX_BAD; +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + if (!value || value == Py_None) { + value = NULL; + } else if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; } -#endif - if (getstate) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate); + Py_XINCREF(value); + __Pyx_Py_XDECREF_SET(op->func_annotations, value); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { + PyObject* result = op->func_annotations; + CYTHON_UNUSED_VAR(context); + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyObject * +__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { + int is_coroutine; + CYTHON_UNUSED_VAR(context); + if (op->func_is_coroutine) { + return __Pyx_NewRef(op->func_is_coroutine); + } + is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; +#if PY_VERSION_HEX >= 0x03050000 + if (is_coroutine) { + PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; + fromlist = PyList_New(1); + if (unlikely(!fromlist)) return NULL; + Py_INCREF(marker); +#if CYTHON_ASSUME_SAFE_MACROS + PyList_SET_ITEM(fromlist, 0, marker); #else - object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate); - if (!object_getstate && PyErr_Occurred()) { - goto __PYX_BAD; + if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { + Py_DECREF(marker); + Py_DECREF(fromlist); + return NULL; } #endif - if (object_getstate != getstate) { - goto __PYX_GOOD; + module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); + Py_DECREF(fromlist); + if (unlikely(!module)) goto ignore; + op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); + Py_DECREF(module); + if (likely(op->func_is_coroutine)) { + return __Pyx_NewRef(op->func_is_coroutine); } +ignore: + PyErr_Clear(); } -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#endif + op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); + return __Pyx_NewRef(op->func_is_coroutine); +} +#if CYTHON_COMPILING_IN_LIMITED_API +static PyObject * +__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_GetAttrString(op->func, "__module__"); +} +static int +__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { + CYTHON_UNUSED_VAR(context); + return PyObject_SetAttrString(op->func, "__module__", value); +} +#endif +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 *) "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}, + {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, +#if CYTHON_COMPILING_IN_LIMITED_API + {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, +#endif + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, +#endif +#if CYTHON_USE_TYPE_SPECS + {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, +#if CYTHON_METH_FASTCALL +#if CYTHON_BACKPORT_VECTORCALL + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, #else - object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; +#if !CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, #endif - reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; - if (reduce_ex == object_reduce_ex) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; +#endif +#endif +#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, #else - object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; + {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, #endif - reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; - if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { - reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); - if (likely(reduce_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (reduce == object_reduce || PyErr_Occurred()) { - goto __PYX_BAD; - } - setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate); - if (!setstate) PyErr_Clear(); - if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { - setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); - if (likely(setstate_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (!setstate || PyErr_Occurred()) { - goto __PYX_BAD; - } - } - PyType_Modified((PyTypeObject*)type_obj); - } - } - goto __PYX_GOOD; -__PYX_BAD: - if (!PyErr_Occurred()) { - __Pyx_TypeName type_obj_name = - __Pyx_PyType_GetName((PyTypeObject*)type_obj); - PyErr_Format(PyExc_RuntimeError, - "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name); - __Pyx_DECREF_TypeName(type_obj_name); - } - ret = -1; -__PYX_GOOD: -#if !CYTHON_USE_PYTYPE_LOOKUP - Py_XDECREF(object_reduce); - Py_XDECREF(object_reduce_ex); - Py_XDECREF(object_getstate); - Py_XDECREF(getstate); #endif - Py_XDECREF(reduce); - Py_XDECREF(reduce_ex); - Py_XDECREF(reduce_cython); - Py_XDECREF(setstate); - Py_XDECREF(setstate_cython); - return ret; + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) +{ + CYTHON_UNUSED_VAR(args); +#if PY_MAJOR_VERSION >= 3 + Py_INCREF(m->func_qualname); + return m->func_qualname; +#else + return PyString_FromString(((PyCFunctionObject*)m)->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 || CYTHON_COMPILING_IN_LIMITED_API +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) #endif - -/* TypeImport */ - #ifndef __PYX_HAVE_RT_ImportType_3_0_11 -#define __PYX_HAVE_RT_ImportType_3_0_11 -static PyTypeObject *__Pyx_ImportType_3_0_11(PyObject *module, const char *module_name, const char *class_name, - size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_11 check_size) -{ - PyObject *result = 0; - char warning[200]; - Py_ssize_t basicsize; - Py_ssize_t itemsize; +static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { +#if !CYTHON_COMPILING_IN_LIMITED_API + PyCFunctionObject *cf = (PyCFunctionObject*) op; +#endif + if (unlikely(op == NULL)) + return NULL; #if CYTHON_COMPILING_IN_LIMITED_API - PyObject *py_basicsize; - PyObject *py_itemsize; + op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); + if (unlikely(!op->func)) return NULL; #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; - } + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; #if !CYTHON_COMPILING_IN_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; - itemsize = ((PyTypeObject *)result)->tp_itemsize; + cf->m_ml = ml; + cf->m_self = (PyObject *) op; +#endif + Py_XINCREF(closure); + op->func_closure = closure; +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_XINCREF(module); + cf->m_module = module; +#endif + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; +#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API + op->func_classobj = NULL; #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; - py_itemsize = PyObject_GetAttrString(result, "__itemsize__"); - if (!py_itemsize) - goto bad; - itemsize = PyLong_AsSsize_t(py_itemsize); - Py_DECREF(py_itemsize); - py_itemsize = 0; - if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; + ((PyCMethodObject*)op)->mm_class = NULL; #endif - if (itemsize) { - if (size % alignment) { - alignment = size % alignment; - } - if (itemsize < (Py_ssize_t)alignment) - itemsize = (Py_ssize_t)alignment; - } - if ((size_t)(basicsize + itemsize) < 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+itemsize); - goto bad; - } - if (check_size == __Pyx_ImportType_CheckSize_Error_3_0_11 && - ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd-%zd from PyObject", - module_name, class_name, size, basicsize, basicsize+itemsize); - goto bad; - } - else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_0_11 && (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; + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults_size = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + op->func_is_coroutine = NULL; +#if CYTHON_METH_FASTCALL + switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { + case METH_NOARGS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; + break; + case METH_O: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; + break; + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; + break; + case METH_FASTCALL | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; + break; + case METH_VARARGS | METH_KEYWORDS: + __Pyx_CyFunction_func_vectorcall(op) = NULL; + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + Py_DECREF(op); + return NULL; } - return (PyTypeObject *)result; -bad: - Py_XDECREF(result); - return NULL; -} #endif - -/* FetchSharedCythonModule */ - static PyObject *__Pyx_FetchSharedCythonABIModule(void) { - return __Pyx_PyImport_AddModuleRef((char*) __PYX_ABI_MODULE_NAME); -} - -/* FetchCommonType */ - static int __Pyx_VerifyCachedType(PyObject *cached_type, - const char *name, - Py_ssize_t basicsize, - Py_ssize_t expected_basicsize) { - if (!PyType_Check(cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", name); - return -1; - } - if (basicsize != expected_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - name); - return -1; - } - return 0; -} -#if !CYTHON_USE_TYPE_SPECS -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* abi_module; - const char* object_name; - PyTypeObject *cached_type = NULL; - abi_module = __Pyx_FetchSharedCythonABIModule(); - if (!abi_module) return NULL; - object_name = strrchr(type->tp_name, '.'); - object_name = object_name ? object_name+1 : type->tp_name; - cached_type = (PyTypeObject*) PyObject_GetAttrString(abi_module, object_name); - if (cached_type) { - if (__Pyx_VerifyCachedType( - (PyObject *)cached_type, - object_name, - cached_type->tp_basicsize, - type->tp_basicsize) < 0) { - goto bad; - } - goto done; - } - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(abi_module, object_name, (PyObject *)type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; -done: - Py_DECREF(abi_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; + return (PyObject *) op; } -#else -static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases) { - PyObject *abi_module, *cached_type = NULL; - const char* object_name = strrchr(spec->name, '.'); - object_name = object_name ? object_name+1 : spec->name; - abi_module = __Pyx_FetchSharedCythonABIModule(); - if (!abi_module) return NULL; - cached_type = PyObject_GetAttrString(abi_module, object_name); - if (cached_type) { - Py_ssize_t basicsize; +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); #if CYTHON_COMPILING_IN_LIMITED_API - PyObject *py_basicsize; - py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__"); - if (unlikely(!py_basicsize)) goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; + Py_CLEAR(m->func); #else - basicsize = likely(PyType_Check(cached_type)) ? ((PyTypeObject*) cached_type)->tp_basicsize : -1; + Py_CLEAR(((PyCFunctionObject*)m)->m_module); #endif - if (__Pyx_VerifyCachedType( - cached_type, - object_name, - basicsize, - spec->basicsize) < 0) { - goto bad; - } - goto done; + 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); +#if !CYTHON_COMPILING_IN_LIMITED_API +#if PY_VERSION_HEX < 0x030900B1 + Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); +#else + { + PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; + ((PyCMethodObject *) (m))->mm_class = NULL; + Py_XDECREF(cls); } - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - CYTHON_UNUSED_VAR(module); - cached_type = __Pyx_PyType_FromModuleAndSpec(abi_module, spec, bases); - if (unlikely(!cached_type)) goto bad; - if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad; - if (PyObject_SetAttrString(abi_module, object_name, cached_type) < 0) goto bad; -done: - Py_DECREF(abi_module); - assert(cached_type == NULL || PyType_Check(cached_type)); - return (PyTypeObject *) cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} #endif - -/* PyVectorcallFastCallDict */ - #if CYTHON_METH_FASTCALL -static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) -{ - PyObject *res = NULL; - PyObject *kwnames; - PyObject **newargs; - PyObject **kwvalues; - Py_ssize_t i, pos; - size_t j; - PyObject *key, *value; - unsigned long keys_are_strings; - Py_ssize_t nkw = PyDict_GET_SIZE(kw); - newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0])); - if (unlikely(newargs == NULL)) { - PyErr_NoMemory(); - return NULL; - } - for (j = 0; j < nargs; j++) newargs[j] = args[j]; - kwnames = PyTuple_New(nkw); - if (unlikely(kwnames == NULL)) { - PyMem_Free(newargs); - return NULL; - } - kwvalues = newargs + nargs; - pos = i = 0; - keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS; - while (PyDict_Next(kw, &pos, &key, &value)) { - keys_are_strings &= Py_TYPE(key)->tp_flags; - Py_INCREF(key); - Py_INCREF(value); - PyTuple_SET_ITEM(kwnames, i, key); - kwvalues[i] = value; - i++; - } - if (unlikely(!keys_are_strings)) { - PyErr_SetString(PyExc_TypeError, "keywords must be strings"); - goto cleanup; +#endif + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + Py_CLEAR(m->func_is_coroutine); + 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; } - res = vc(func, newargs, nargs, kwnames); -cleanup: - Py_DECREF(kwnames); - for (i = 0; i < nkw; i++) - Py_DECREF(kwvalues[i]); - PyMem_Free(newargs); - return res; + return 0; } -static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw) +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) { - if (likely(kw == NULL) || PyDict_GET_SIZE(kw) == 0) { - return vc(func, args, nargs, NULL); - } - return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw); + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + __Pyx_PyHeapTypeObject_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); +#if CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(m->func); +#else + Py_VISIT(((PyCFunctionObject*)m)->m_module); #endif - -/* CythonFunctionShared */ - #if CYTHON_COMPILING_IN_LIMITED_API -static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { - if (__Pyx_CyFunction_Check(func)) { - return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc; - } else if (PyCFunction_Check(func)) { - return PyCFunction_GetFunction(func) == (PyCFunction) cfunc; + 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); +#if !CYTHON_COMPILING_IN_LIMITED_API + Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); +#endif + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + Py_VISIT(m->func_is_coroutine); + 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_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); #else -static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void *cfunc) { - return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc; + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif } +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { +#if CYTHON_COMPILING_IN_LIMITED_API + PyObject *f = ((__pyx_CyFunctionObject*)func)->func; + PyObject *py_name = NULL; + PyCFunction meth; + int flags; + meth = PyCFunction_GetFunction(f); + if (unlikely(!meth)) return NULL; + flags = PyCFunction_GetFlags(f); + if (unlikely(flags < 0)) return NULL; +#else + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + int flags = f->m_ml->ml_flags; #endif -static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) { -#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API - __Pyx_Py_XDECREF_SET( - __Pyx_CyFunction_GetClassObj(f), - ((classobj) ? __Pyx_NewRef(classobj) : NULL)); + Py_ssize_t size; + switch (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)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); #else - __Pyx_Py_XDECREF_SET( - ((PyCMethodObject *) (f))->mm_class, - (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL)); + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; #endif -} -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) -{ - CYTHON_UNUSED_VAR(closure); - if (unlikely(op->func_doc == NULL)) { + if (likely(size == 0)) + return (*meth)(self, NULL); #if CYTHON_COMPILING_IN_LIMITED_API - op->func_doc = PyObject_GetAttrString(op->func, "__doc__"); - if (unlikely(!op->func_doc)) return NULL; + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); #else - if (((PyCFunctionObject*)op)->m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { +#if CYTHON_ASSUME_SAFE_MACROS + size = PyTuple_GET_SIZE(arg); #else - op->func_doc = PyString_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc); + size = PyTuple_Size(arg); + if (unlikely(size < 0)) return NULL; #endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = __Pyx_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; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, + "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + py_name, size); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); +#endif + return NULL; } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); + return NULL; + } +#if CYTHON_COMPILING_IN_LIMITED_API + py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); + if (!py_name) return NULL; + PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", + py_name); + Py_DECREF(py_name); +#else + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); +#endif + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *self, *result; +#if CYTHON_COMPILING_IN_LIMITED_API + self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); + if (unlikely(!self) && PyErr_Occurred()) return NULL; +#else + self = ((PyCFunctionObject*)func)->m_self; +#endif + result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); + return result; +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; +#if CYTHON_METH_FASTCALL + __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); + if (vc) { +#if CYTHON_ASSUME_SAFE_MACROS + return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); +#else + (void) &__Pyx_PyVectorcall_FastCallDict; + return PyVectorcall_Call(func, args, kw); #endif } - Py_INCREF(op->func_doc); - return op->func_doc; +#endif + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; +#if CYTHON_ASSUME_SAFE_MACROS + argc = PyTuple_GET_SIZE(args); +#else + argc = PyTuple_Size(args); + if (unlikely(!argc) < 0) return NULL; +#endif + 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); +#if PY_MAJOR_VERSION > 2 + PyErr_Format(PyExc_TypeError, + "unbound method %.200S() needs an argument", + cyfunc->func_qualname); +#else + PyErr_SetString(PyExc_TypeError, + "unbound method needs an argument"); +#endif + 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 int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context) +#if CYTHON_METH_FASTCALL +static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) { - CYTHON_UNUSED_VAR(context); - if (value == NULL) { - value = Py_None; + int ret = 0; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + if (unlikely(nargs < 1)) { + PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", + ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + ret = 1; } - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->func_doc, value); - return 0; + if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); + return -1; + } + return ret; } -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context) +static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) { - CYTHON_UNUSED_VAR(context); - if (unlikely(op->func_name == NULL)) { -#if CYTHON_COMPILING_IN_LIMITED_API - op->func_name = PyObject_GetAttrString(op->func, "__name__"); -#elif PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; #else - op->func_name = PyString_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name); + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); #endif - if (unlikely(op->func_name == NULL)) - return NULL; + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; } - Py_INCREF(op->func_name); - return op->func_name; + if (unlikely(nargs != 0)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, NULL); } -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context) +static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) { - CYTHON_UNUSED_VAR(context); -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; #else - if (unlikely(value == NULL || !PyString_Check(value))) + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); #endif - { - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; } - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->func_name, value); - return 0; + if (unlikely(nargs != 1)) { + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + def->ml_name, nargs); + return NULL; + } + return def->ml_meth(self, args[0]); } -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context) +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) { - CYTHON_UNUSED_VAR(context); - Py_INCREF(op->func_qualname); - return op->func_qualname; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); } -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context) +static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) { - CYTHON_UNUSED_VAR(context); -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; + PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; + PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); +#if CYTHON_BACKPORT_VECTORCALL + Py_ssize_t nargs = (Py_ssize_t)nargsf; +#else + Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); +#endif + PyObject *self; + switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { + case 1: + self = args[0]; + args += 1; + nargs -= 1; + break; + case 0: + self = ((PyCFunctionObject*)cyfunc)->m_self; + break; + default: + return NULL; + } + return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); +} +#endif +#if CYTHON_USE_TYPE_SPECS +static PyType_Slot __pyx_CyFunctionType_slots[] = { + {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, + {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, + {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, + {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, + {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, + {Py_tp_methods, (void *)__pyx_CyFunction_methods}, + {Py_tp_members, (void *)__pyx_CyFunction_members}, + {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, + {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, + {0, 0}, +}; +static PyType_Spec __pyx_CyFunctionType_spec = { + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + __pyx_CyFunctionType_slots +}; +#else +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, +#if !CYTHON_METH_FASTCALL + 0, +#elif CYTHON_BACKPORT_VECTORCALL + (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), +#else + offsetof(PyCFunctionObject, vectorcall), +#endif + 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, +#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR + Py_TPFLAGS_METHOD_DESCRIPTOR | +#endif +#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL + _Py_TPFLAGS_HAVE_VECTORCALL | +#endif + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + 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_PyMethod_New, + 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 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) + 0, +#endif +#if __PYX_NEED_TP_PRINT_SLOT + 0, +#endif +#if PY_VERSION_HEX >= 0x030C0000 + 0, +#endif +#if PY_VERSION_HEX >= 0x030d00A4 + 0, +#endif +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 + 0, +#endif +}; +#endif +static int __pyx_CyFunction_init(PyObject *module) { +#if CYTHON_USE_TYPE_SPECS + __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); #else - if (unlikely(value == NULL || !PyString_Check(value))) + CYTHON_UNUSED_VAR(module); + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); #endif - { - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); + if (unlikely(__pyx_CyFunctionType == NULL)) { return -1; } - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->func_qualname, value); return 0; } -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context) -{ - CYTHON_UNUSED_VAR(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, void *context) -{ - CYTHON_UNUSED_VAR(context); - 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; - } - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->func_dict, value); - 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; + m->defaults_size = size; + return m->defaults; } -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context) -{ - CYTHON_UNUSED_VAR(context); - Py_INCREF(op->func_globals); - return op->func_globals; +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 PyObject * -__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context) -{ - CYTHON_UNUSED_VAR(op); - CYTHON_UNUSED_VAR(context); - Py_INCREF(Py_None); - return Py_None; +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 PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - CYTHON_UNUSED_VAR(context); - Py_INCREF(result); - return result; +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); } -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 = __Pyx_PySequence_ITEM(res, 0); - if (unlikely(!op->defaults_tuple)) result = -1; - else { - op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1); - if (unlikely(!op->defaults_kwdict)) result = -1; + +/* CythonFunction */ + static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + PyObject *op = __Pyx_CyFunction_Init( + PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), + ml, flags, qualname, closure, module, globals, code + ); + if (likely(op)) { + PyObject_GC_Track(op); } - #endif - Py_DECREF(res); - return result; + return op; } -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { - CYTHON_UNUSED_VAR(context); - if (!value) { - value = Py_None; - } else if (unlikely(value != Py_None && !PyTuple_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; + +/* 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 + CYTHON_MAYBE_UNUSED_VAR(tstate); + if (unlikely(!__pyx_cython_runtime)) { + return c_line; } - PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not " - "currently affect the values used in function calls", 1); - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->defaults_tuple, value); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) { - PyObject* result = op->defaults_tuple; - CYTHON_UNUSED_VAR(context); - if (unlikely(!result)) { - if (op->defaults_getter) { - if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } + __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_GetAttrStrNoError(__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; + } } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) { - CYTHON_UNUSED_VAR(context); - if (!value) { - value = Py_None; - } else if (unlikely(value != Py_None && !PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; + if (!use_cline) { + c_line = 0; + (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); } - PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not " - "currently affect the values used in function calls", 1); - Py_INCREF(value); - __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value); - return 0; + 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; } -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) { - PyObject* result = op->defaults_kwdict; - CYTHON_UNUSED_VAR(context); - if (unlikely(!result)) { - if (op->defaults_getter) { - if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL; - result = op->defaults_kwdict; +#endif + +/* CodeObjectCache */ + #if !CYTHON_COMPILING_IN_LIMITED_API +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 { - result = Py_None; + return mid; } } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) { - CYTHON_UNUSED_VAR(context); - if (!value || value == Py_None) { - value = NULL; - } else if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; } - Py_XINCREF(value); - __Pyx_Py_XDECREF_SET(op->func_annotations, value); - return 0; } -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) { - PyObject* result = op->func_annotations; - CYTHON_UNUSED_VAR(context); - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; +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; } - Py_INCREF(result); - return result; + 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 PyObject * -__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) { - int is_coroutine; - CYTHON_UNUSED_VAR(context); - if (op->func_is_coroutine) { - return __Pyx_NewRef(op->func_is_coroutine); +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; } - is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE; -#if PY_VERSION_HEX >= 0x03050000 - if (is_coroutine) { - PyObject *module, *fromlist, *marker = __pyx_n_s_is_coroutine; - fromlist = PyList_New(1); - if (unlikely(!fromlist)) return NULL; - Py_INCREF(marker); -#if CYTHON_ASSUME_SAFE_MACROS - PyList_SET_ITEM(fromlist, 0, marker); -#else - if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) { - Py_DECREF(marker); - Py_DECREF(fromlist); - return NULL; + 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); } -#endif - module = PyImport_ImportModuleLevelObject(__pyx_n_s_asyncio_coroutines, NULL, NULL, fromlist, 0); - Py_DECREF(fromlist); - if (unlikely(!module)) goto ignore; - op->func_is_coroutine = __Pyx_PyObject_GetAttrStr(module, marker); - Py_DECREF(module); - if (likely(op->func_is_coroutine)) { - return __Pyx_NewRef(op->func_is_coroutine); + 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; } -ignore: - PyErr_Clear(); + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; } -#endif - op->func_is_coroutine = __Pyx_PyBool_FromLong(is_coroutine); - return __Pyx_NewRef(op->func_is_coroutine); -} -#if CYTHON_COMPILING_IN_LIMITED_API -static PyObject * -__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) { - CYTHON_UNUSED_VAR(context); - return PyObject_GetAttrString(op->func, "__module__"); -} -static int -__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) { - CYTHON_UNUSED_VAR(context); - return PyObject_SetAttrString(op->func, "__module__", value); -} -#endif -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 *) "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}, - {(char *) "_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0}, -#if CYTHON_COMPILING_IN_LIMITED_API - {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0}, -#endif - {0, 0, 0, 0, 0} -}; -static PyMemberDef __pyx_CyFunction_members[] = { -#if !CYTHON_COMPILING_IN_LIMITED_API - {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0}, -#endif -#if CYTHON_USE_TYPE_SPECS - {(char *) "__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0}, -#if CYTHON_METH_FASTCALL -#if CYTHON_BACKPORT_VECTORCALL - {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0}, -#else -#if !CYTHON_COMPILING_IN_LIMITED_API - {(char *) "__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0}, -#endif -#endif -#endif -#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API - {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0}, -#else - {(char *) "__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0}, -#endif -#endif - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args) -{ - CYTHON_UNUSED_VAR(args); -#if PY_MAJOR_VERSION >= 3 - Py_INCREF(m->func_qualname); - return m->func_qualname; -#else - return PyString_FromString(((PyCFunctionObject*)m)->m_ml->ml_name); -#endif + 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); } -static PyMethodDef __pyx_CyFunction_methods[] = { - {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API -#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) -#else -#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist) #endif -static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { -#if !CYTHON_COMPILING_IN_LIMITED_API - PyCFunctionObject *cf = (PyCFunctionObject*) op; + +/* AddTraceback */ + #include "compile.h" +#include "frameobject.h" +#include "traceback.h" +#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API + #ifndef Py_BUILD_CORE + #define Py_BUILD_CORE 1 + #endif + #include "internal/pycore_frame.h" #endif - if (unlikely(op == NULL)) - return NULL; #if CYTHON_COMPILING_IN_LIMITED_API - op->func = PyCFunction_NewEx(ml, (PyObject*)op, module); - if (unlikely(!op->func)) return NULL; -#endif - op->flags = flags; - __Pyx_CyFunction_weakreflist(op) = NULL; -#if !CYTHON_COMPILING_IN_LIMITED_API - cf->m_ml = ml; - cf->m_self = (PyObject *) op; -#endif - Py_XINCREF(closure); - op->func_closure = closure; -#if !CYTHON_COMPILING_IN_LIMITED_API - Py_XINCREF(module); - cf->m_module = module; -#endif - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; -#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API - op->func_classobj = NULL; -#else - ((PyCMethodObject*)op)->mm_class = NULL; -#endif - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults_size = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - op->func_is_coroutine = NULL; -#if CYTHON_METH_FASTCALL - switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) { - case METH_NOARGS: - __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS; - break; - case METH_O: - __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O; - break; - case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: - __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD; - break; - case METH_FASTCALL | METH_KEYWORDS: - __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS; - break; - case METH_VARARGS | METH_KEYWORDS: - __Pyx_CyFunction_func_vectorcall(op) = NULL; - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); - Py_DECREF(op); - return NULL; +static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, + PyObject *firstlineno, PyObject *name) { + PyObject *replace = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; + replace = PyObject_GetAttrString(code, "replace"); + if (likely(replace)) { + PyObject *result; + result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); + Py_DECREF(replace); + return result; + } + PyErr_Clear(); + #if __PYX_LIMITED_VERSION_HEX < 0x030780000 + { + PyObject *compiled = NULL, *result = NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; + if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; + compiled = Py_CompileString( + "out = type(code)(\n" + " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" + " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" + " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" + " code.co_lnotab)\n", "", Py_file_input); + if (!compiled) return NULL; + result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); + Py_DECREF(compiled); + if (!result) PyErr_Print(); + Py_DECREF(result); + result = PyDict_GetItemString(scratch_dict, "out"); + if (result) Py_INCREF(result); + return result; } -#endif - return (PyObject *) op; + #else + return NULL; + #endif } -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); -#if CYTHON_COMPILING_IN_LIMITED_API - Py_CLEAR(m->func); -#else - Py_CLEAR(((PyCFunctionObject*)m)->m_module); -#endif - 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); -#if !CYTHON_COMPILING_IN_LIMITED_API -#if PY_VERSION_HEX < 0x030900B1 - Py_CLEAR(__Pyx_CyFunction_GetClassObj(m)); -#else +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; + PyObject *replace = NULL, *getframe = NULL, *frame = NULL; + PyObject *exc_type, *exc_value, *exc_traceback; + int success = 0; + if (c_line) { + (void) __pyx_cfilenm; + (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); + } + PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); + code_object = Py_CompileString("_getframe()", filename, Py_eval_input); + if (unlikely(!code_object)) goto bad; + py_py_line = PyLong_FromLong(py_line); + if (unlikely(!py_py_line)) goto bad; + py_funcname = PyUnicode_FromString(funcname); + if (unlikely(!py_funcname)) goto bad; + dict = PyDict_New(); + if (unlikely(!dict)) goto bad; { - PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class; - ((PyCMethodObject *) (m))->mm_class = NULL; - Py_XDECREF(cls); + PyObject *old_code_object = code_object; + code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); + Py_DECREF(old_code_object); } -#endif -#endif - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - Py_CLEAR(m->func_is_coroutine); - 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; + if (unlikely(!code_object)) goto bad; + getframe = PySys_GetObject("_getframe"); + if (unlikely(!getframe)) goto bad; + if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; + frame = PyEval_EvalCode(code_object, dict, dict); + if (unlikely(!frame) || frame == Py_None) goto bad; + success = 1; + bad: + PyErr_Restore(exc_type, exc_value, exc_traceback); + Py_XDECREF(code_object); + Py_XDECREF(py_py_line); + Py_XDECREF(py_funcname); + Py_XDECREF(dict); + Py_XDECREF(replace); + if (success) { + PyTraceBack_Here( + (struct _frame*)frame); } - return 0; + Py_XDECREF(frame); } -static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - if (__Pyx_CyFunction_weakreflist(m) != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - __Pyx_PyHeapTypeObject_GC_Del(m); +#else +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = NULL; + PyObject *py_funcname = NULL; + #if PY_MAJOR_VERSION < 3 + PyObject *py_srcfile = NULL; + py_srcfile = PyString_FromString(filename); + if (!py_srcfile) goto bad; + #endif + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + if (!py_funcname) goto bad; + funcname = PyUnicode_AsUTF8(py_funcname); + if (!funcname) goto bad; + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + if (!py_funcname) goto bad; + #endif + } + #if PY_MAJOR_VERSION < 3 + py_code = __Pyx_PyCode_New( + 0, + 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); + #else + py_code = PyCode_NewEmpty(filename, funcname, py_line); + #endif + Py_XDECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_funcname); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_srcfile); + #endif + return NULL; } -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - __Pyx__CyFunction_dealloc(m); +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; + PyObject *ptype, *pvalue, *ptraceback; + 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) { + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) { + /* If the code object creation fails, then we should clear the + fetched exception references and propagate the new exception */ + Py_XDECREF(ptype); + Py_XDECREF(pvalue); + Py_XDECREF(ptraceback); + goto bad; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + __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); } -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); -#if CYTHON_COMPILING_IN_LIMITED_API - Py_VISIT(m->func); -#else - Py_VISIT(((PyCFunctionObject*)m)->m_module); -#endif - 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); -#if !CYTHON_COMPILING_IN_LIMITED_API - Py_VISIT(__Pyx_CyFunction_GetClassObj(m)); #endif - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - Py_VISIT(m->func_is_coroutine); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); + +/* 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;\ } - return 0; + +#if PY_MAJOR_VERSION < 3 +static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { + __Pyx_TypeName obj_type_name; + if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); + if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags); + if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags); + obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); + PyErr_Format(PyExc_TypeError, + "'" __Pyx_FMT_TYPENAME "' does not have the buffer interface", + obj_type_name); + __Pyx_DECREF_TypeName(obj_type_name); + return -1; } -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 void __Pyx_ReleaseBuffer(Py_buffer *view) { + PyObject *obj = view->obj; + if (!obj) return; + if (PyObject_CheckBuffer(obj)) { + PyBuffer_Release(view); + return; + } + if ((0)) {} + view->obj = NULL; + Py_DECREF(obj); } -static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { -#if CYTHON_COMPILING_IN_LIMITED_API - PyObject *f = ((__pyx_CyFunctionObject*)func)->func; - PyObject *py_name = NULL; - PyCFunction meth; - int flags; - meth = PyCFunction_GetFunction(f); - if (unlikely(!meth)) return NULL; - flags = PyCFunction_GetFlags(f); - if (unlikely(flags < 0)) return NULL; -#else - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = f->m_ml->ml_meth; - int flags = f->m_ml->ml_flags; -#endif - Py_ssize_t size; - switch (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)) { -#if CYTHON_ASSUME_SAFE_MACROS - size = PyTuple_GET_SIZE(arg); -#else - size = PyTuple_Size(arg); - if (unlikely(size < 0)) return NULL; -#endif - if (likely(size == 0)) - return (*meth)(self, NULL); -#if CYTHON_COMPILING_IN_LIMITED_API - py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); - if (!py_name) return NULL; - PyErr_Format(PyExc_TypeError, - "%.200S() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", - py_name, size); - Py_DECREF(py_name); -#else - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", - f->m_ml->ml_name, size); -#endif - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL || PyDict_Size(kw) == 0)) { -#if CYTHON_ASSUME_SAFE_MACROS - size = PyTuple_GET_SIZE(arg); -#else - size = PyTuple_Size(arg); - if (unlikely(size < 0)) return NULL; -#endif - if (likely(size == 1)) { - PyObject *result, *arg0; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - arg0 = PyTuple_GET_ITEM(arg, 0); - #else - arg0 = __Pyx_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; - } -#if CYTHON_COMPILING_IN_LIMITED_API - py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); - if (!py_name) return NULL; - PyErr_Format(PyExc_TypeError, - "%.200S() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", - py_name, size); - Py_DECREF(py_name); -#else - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", - f->m_ml->ml_name, size); #endif - return NULL; + + + /* MemviewSliceIsContig */ + static int +__pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim) +{ + int i, index, step, start; + Py_ssize_t itemsize = mvs.memview->view.itemsize; + if (order == 'F') { + step = 1; + start = 0; + } else { + step = -1; + start = ndim - 1; + } + for (i = 0; i < ndim; i++) { + index = start + step * i; + if (mvs.suboffsets[index] >= 0 || mvs.strides[index] != itemsize) + return 0; + itemsize *= mvs.shape[index]; + } + return 1; +} + +/* OverlappingSlices */ + static void +__pyx_get_array_memory_extents(__Pyx_memviewslice *slice, + void **out_start, void **out_end, + int ndim, size_t itemsize) +{ + char *start, *end; + int i; + start = end = slice->data; + for (i = 0; i < ndim; i++) { + Py_ssize_t stride = slice->strides[i]; + Py_ssize_t extent = slice->shape[i]; + if (extent == 0) { + *out_start = *out_end = start; + return; + } else { + if (stride > 0) + end += stride * (extent - 1); + else + start += stride * (extent - 1); } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction"); - return NULL; } -#if CYTHON_COMPILING_IN_LIMITED_API - py_name = __Pyx_CyFunction_get_name((__pyx_CyFunctionObject*)func, NULL); - if (!py_name) return NULL; - PyErr_Format(PyExc_TypeError, "%.200S() takes no keyword arguments", - py_name); - Py_DECREF(py_name); -#else - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); -#endif - return NULL; + *out_start = start; + *out_end = end + itemsize; } -static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *self, *result; -#if CYTHON_COMPILING_IN_LIMITED_API - self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func); - if (unlikely(!self) && PyErr_Occurred()) return NULL; -#else - self = ((PyCFunctionObject*)func)->m_self; -#endif - result = __Pyx_CyFunction_CallMethod(func, self, arg, kw); - return result; +static int +__pyx_slices_overlap(__Pyx_memviewslice *slice1, + __Pyx_memviewslice *slice2, + int ndim, size_t itemsize) +{ + void *start1, *end1, *start2, *end2; + __pyx_get_array_memory_extents(slice1, &start1, &end1, ndim, itemsize); + __pyx_get_array_memory_extents(slice2, &start2, &end2, ndim, itemsize); + return (start1 < end2) && (start2 < end1); } -static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { - PyObject *result; - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; -#if CYTHON_METH_FASTCALL - __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc); - if (vc) { -#if CYTHON_ASSUME_SAFE_MACROS - return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw); -#else - (void) &__Pyx_PyVectorcall_FastCallDict; - return PyVectorcall_Call(func, args, kw); -#endif + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return ::std::complex< float >(x, y); } -#endif - if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { - Py_ssize_t argc; - PyObject *new_args; - PyObject *self; -#if CYTHON_ASSUME_SAFE_MACROS - argc = PyTuple_GET_SIZE(args); + #else + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + return x + y*(__pyx_t_float_complex)_Complex_I; + } + #endif #else - argc = PyTuple_Size(args); - if (unlikely(!argc) < 0) return NULL; + static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { + __pyx_t_float_complex z; + z.real = x; + z.imag = y; + return z; + } #endif - 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); -#if PY_MAJOR_VERSION > 2 - PyErr_Format(PyExc_TypeError, - "unbound method %.200S() needs an argument", - cyfunc->func_qualname); + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #else - PyErr_SetString(PyExc_TypeError, - "unbound method needs an argument"); -#endif - return NULL; + static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + return (a.real == b.real) && (a.imag == b.imag); + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; + } + #if 1 + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsf(b.real) >= fabsf(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + float r = b.imag / b.real; + float s = (float)(1.0) / (b.real + b.imag * r); + return __pyx_t_float_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + float r = b.real / b.imag; + float s = (float)(1.0) / (b.imag + b.real * r); + return __pyx_t_float_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); } - result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); - Py_DECREF(new_args); - } else { - result = __Pyx_CyFunction_Call(func, args, kw); } - return result; -} -#if CYTHON_METH_FASTCALL -static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames) -{ - int ret = 0; - if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { - if (unlikely(nargs < 1)) { - PyErr_Format(PyExc_TypeError, "%.200s() needs an argument", - ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); - return -1; + #else + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + if (b.imag == 0) { + return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + float denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_float_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); } - ret = 1; } - if (unlikely(kwnames) && unlikely(PyTuple_GET_SIZE(kwnames))) { - PyErr_Format(PyExc_TypeError, - "%.200s() takes no keyword arguments", ((PyCFunctionObject*)cyfunc)->m_ml->ml_name); - return -1; + #endif + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; } - return ret; -} -static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) -{ - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; - PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; -#if CYTHON_BACKPORT_VECTORCALL - Py_ssize_t nargs = (Py_ssize_t)nargsf; -#else - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); -#endif - PyObject *self; - switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { - case 1: - self = args[0]; - args += 1; - nargs -= 1; - break; - case 0: - self = ((PyCFunctionObject*)cyfunc)->m_self; - break; - default: - return NULL; + static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) { + return (a.real == 0) && (a.imag == 0); } - if (unlikely(nargs != 0)) { - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", - def->ml_name, nargs); - return NULL; + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) { + __pyx_t_float_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; } - return def->ml_meth(self, NULL); -} -static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) -{ - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; - PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; -#if CYTHON_BACKPORT_VECTORCALL - Py_ssize_t nargs = (Py_ssize_t)nargsf; -#else - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); + #if 1 + static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrtf(z.real*z.real + z.imag*z.imag); + #else + return hypotf(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + __pyx_t_float_complex z; + float r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + float denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_float(a, a); + case 3: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, a); + case 4: + z = __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_float(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = powf(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2f(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_float(a); + theta = atan2f(a.imag, a.real); + } + lnr = logf(r); + z_r = expf(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cosf(z_theta); + z.imag = z_r * sinf(z_theta); + return z; + } + #endif #endif - PyObject *self; - switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) { - case 1: - self = args[0]; - args += 1; - nargs -= 1; - break; - case 0: - self = ((PyCFunctionObject*)cyfunc)->m_self; - break; - default: - return NULL; - } - if (unlikely(nargs != 1)) { - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", - def->ml_name, nargs); - return NULL; + +/* Declarations */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) + #ifdef __cplusplus + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return ::std::complex< double >(x, y); } - return def->ml_meth(self, args[0]); -} -static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) -{ - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; - PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; -#if CYTHON_BACKPORT_VECTORCALL - Py_ssize_t nargs = (Py_ssize_t)nargsf; -#else - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); -#endif - PyObject *self; - switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { - case 1: - self = args[0]; - args += 1; - nargs -= 1; - break; - case 0: - self = ((PyCFunctionObject*)cyfunc)->m_self; - break; - default: - return NULL; + #else + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + return x + y*(__pyx_t_double_complex)_Complex_I; } - return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))def->ml_meth)(self, args, nargs, kwnames); -} -static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames) -{ - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func; - PyMethodDef* def = ((PyCFunctionObject*)cyfunc)->m_ml; - PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc); -#if CYTHON_BACKPORT_VECTORCALL - Py_ssize_t nargs = (Py_ssize_t)nargsf; + #endif #else - Py_ssize_t nargs = PyVectorcall_NARGS(nargsf); -#endif - PyObject *self; - switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) { - case 1: - self = args[0]; - args += 1; - nargs -= 1; - break; - case 0: - self = ((PyCFunctionObject*)cyfunc)->m_self; - break; - default: - return NULL; + static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { + __pyx_t_double_complex z; + z.real = x; + z.imag = y; + return z; } - return ((__Pyx_PyCMethod)(void(*)(void))def->ml_meth)(self, cls, args, (size_t)nargs, kwnames); -} -#endif -#if CYTHON_USE_TYPE_SPECS -static PyType_Slot __pyx_CyFunctionType_slots[] = { - {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc}, - {Py_tp_repr, (void *)__Pyx_CyFunction_repr}, - {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod}, - {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse}, - {Py_tp_clear, (void *)__Pyx_CyFunction_clear}, - {Py_tp_methods, (void *)__pyx_CyFunction_methods}, - {Py_tp_members, (void *)__pyx_CyFunction_members}, - {Py_tp_getset, (void *)__pyx_CyFunction_getsets}, - {Py_tp_descr_get, (void *)__Pyx_PyMethod_New}, - {0, 0}, -}; -static PyType_Spec __pyx_CyFunctionType_spec = { - __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", - sizeof(__pyx_CyFunctionObject), - 0, -#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR - Py_TPFLAGS_METHOD_DESCRIPTOR | -#endif -#if (defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL) - _Py_TPFLAGS_HAVE_VECTORCALL | -#endif - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, - __pyx_CyFunctionType_slots -}; -#else -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - __PYX_TYPE_MODULE_PREFIX "cython_function_or_method", - sizeof(__pyx_CyFunctionObject), - 0, - (destructor) __Pyx_CyFunction_dealloc, -#if !CYTHON_METH_FASTCALL - 0, -#elif CYTHON_BACKPORT_VECTORCALL - (printfunc)offsetof(__pyx_CyFunctionObject, func_vectorcall), -#else - offsetof(PyCFunctionObject, vectorcall), -#endif - 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, -#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR - Py_TPFLAGS_METHOD_DESCRIPTOR | -#endif -#if defined(_Py_TPFLAGS_HAVE_VECTORCALL) && CYTHON_METH_FASTCALL - _Py_TPFLAGS_HAVE_VECTORCALL | -#endif - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, - 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_PyMethod_New, - 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 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800) - 0, -#endif -#if __PYX_NEED_TP_PRINT_SLOT - 0, -#endif -#if PY_VERSION_HEX >= 0x030C0000 - 0, -#endif -#if PY_VERSION_HEX >= 0x030d00A4 - 0, -#endif -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000 - 0, -#endif -}; #endif -static int __pyx_CyFunction_init(PyObject *module) { -#if CYTHON_USE_TYPE_SPECS - __pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(module, &__pyx_CyFunctionType_spec, NULL); + +/* Arithmetic */ + #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #else - CYTHON_UNUSED_VAR(module); - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); -#endif - if (unlikely(__pyx_CyFunctionType == NULL)) { - return -1; + static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + return (a.real == b.real) && (a.imag == b.imag); } - 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; - m->defaults_size = size; - 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); -} - -/* CythonFunction */ - static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - PyObject *op = __Pyx_CyFunction_Init( - PyObject_GC_New(__pyx_CyFunctionObject, __pyx_CyFunctionType), - ml, flags, qualname, closure, module, globals, code - ); - if (likely(op)) { - PyObject_GC_Track(op); + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real + b.real; + z.imag = a.imag + b.imag; + return z; } - return op; -} - -/* 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 - CYTHON_MAYBE_UNUSED_VAR(tstate); - if (unlikely(!__pyx_cython_runtime)) { - return c_line; + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real - b.real; + z.imag = a.imag - b.imag; + return z; } - __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_GetAttrStrNoError(__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; - } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + z.real = a.real * b.real - a.imag * b.imag; + z.imag = a.real * b.imag + a.imag * b.real; + return z; } - if (!use_cline) { - c_line = 0; - (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + #if 1 + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabs(b.real) >= fabs(b.imag)) { + if (b.real == 0 && b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag); + } else { + double r = b.imag / b.real; + double s = (double)(1.0) / (b.real + b.imag * r); + return __pyx_t_double_complex_from_parts( + (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); + } + } else { + double r = b.real / b.imag; + double s = (double)(1.0) / (b.imag + b.real * r); + return __pyx_t_double_complex_from_parts( + (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + } } - else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { - c_line = 0; + #else + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + if (b.imag == 0) { + return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else { + double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_double_complex_from_parts( + (a.real * b.real + a.imag * b.imag) / denom, + (a.imag * b.real - a.real * b.imag) / denom); + } } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - return c_line; -} + #endif + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = -a.real; + z.imag = -a.imag; + return z; + } + static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) { + return (a.real == 0) && (a.imag == 0); + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) { + __pyx_t_double_complex z; + z.real = a.real; + z.imag = -a.imag; + return z; + } + #if 1 + static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) { + #if !defined(HAVE_HYPOT) || defined(_MSC_VER) + return sqrt(z.real*z.real + z.imag*z.imag); + #else + return hypot(z.real, z.imag); + #endif + } + static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { + __pyx_t_double_complex z; + double r, lnr, theta, z_r, z_theta; + if (b.imag == 0 && b.real == (int)b.real) { + if (b.real < 0) { + double denom = a.real * a.real + a.imag * a.imag; + a.real = a.real / denom; + a.imag = -a.imag / denom; + b.real = -b.real; + } + switch ((int)b.real) { + case 0: + z.real = 1; + z.imag = 0; + return z; + case 1: + return a; + case 2: + return __Pyx_c_prod_double(a, a); + case 3: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, a); + case 4: + z = __Pyx_c_prod_double(a, a); + return __Pyx_c_prod_double(z, z); + } + } + if (a.imag == 0) { + if (a.real == 0) { + return a; + } else if ((b.imag == 0) && (a.real >= 0)) { + z.real = pow(a.real, b.real); + z.imag = 0; + return z; + } else if (a.real > 0) { + r = a.real; + theta = 0; + } else { + r = -a.real; + theta = atan2(0.0, -1.0); + } + } else { + r = __Pyx_c_abs_double(a); + theta = atan2(a.imag, a.real); + } + lnr = log(r); + z_r = exp(lnr * b.real - theta * b.imag); + z_theta = theta * b.real + lnr * b.imag; + z.real = z_r * cos(z_theta); + z.imag = z_r * sin(z_theta); + return z; + } + #endif #endif -/* CodeObjectCache */ - #if !CYTHON_COMPILING_IN_LIMITED_API -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; +/* TypeInfoCompare */ + static int +__pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b) +{ + int i; + if (!a || !b) + return 0; + if (a == b) + return 1; + if (a->size != b->size || a->typegroup != b->typegroup || + a->is_unsigned != b->is_unsigned || a->ndim != b->ndim) { + if (a->typegroup == 'H' || b->typegroup == 'H') { + return a->size == b->size; } else { - return mid; + return 0; } } - 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; + if (a->ndim) { + for (i = 0; i < a->ndim; i++) + if (a->arraysize[i] != b->arraysize[i]) + return 0; } - 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; + if (a->typegroup == 'S') { + if (a->flags != b->flags) + return 0; + if (a->fields || b->fields) { + if (!(a->fields && b->fields)) + return 0; + for (i = 0; a->fields[i].type && b->fields[i].type; i++) { + __Pyx_StructField *field_a = a->fields + i; + __Pyx_StructField *field_b = b->fields + i; + if (field_a->offset != field_b->offset || + !__pyx_typeinfo_cmp(field_a->type, field_b->type)) + return 0; + } + return !a->fields[i].type && !b->fields[i].type; + } } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; + return 1; } -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); + +/* MemviewSliceValidateAndInit */ + static int +__pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec) +{ + if (buf->shape[dim] <= 1) + return 1; + if (buf->strides) { + if (spec & __Pyx_MEMVIEW_CONTIG) { + if (spec & (__Pyx_MEMVIEW_PTR|__Pyx_MEMVIEW_FULL)) { + if (unlikely(buf->strides[dim] != sizeof(void *))) { + PyErr_Format(PyExc_ValueError, + "Buffer is not indirectly contiguous " + "in dimension %d.", dim); + goto fail; + } + } else if (unlikely(buf->strides[dim] != buf->itemsize)) { + PyErr_SetString(PyExc_ValueError, + "Buffer and memoryview are not contiguous " + "in the same dimension."); + goto fail; + } } - 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; + if (spec & __Pyx_MEMVIEW_FOLLOW) { + Py_ssize_t stride = buf->strides[dim]; + if (stride < 0) + stride = -stride; + if (unlikely(stride < buf->itemsize)) { + PyErr_SetString(PyExc_ValueError, + "Buffer and memoryview are not contiguous " + "in the same dimension."); + goto fail; + } + } + } else { + if (unlikely(spec & __Pyx_MEMVIEW_CONTIG && dim != ndim - 1)) { + PyErr_Format(PyExc_ValueError, + "C-contiguous buffer is not contiguous in " + "dimension %d", dim); + goto fail; + } else if (unlikely(spec & (__Pyx_MEMVIEW_PTR))) { + PyErr_Format(PyExc_ValueError, + "C-contiguous buffer is not indirect in " + "dimension %d", dim); + goto fail; + } else if (unlikely(buf->suboffsets)) { + PyErr_SetString(PyExc_ValueError, + "Buffer exposes suboffsets but no strides"); + goto fail; } - __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); + return 1; +fail: + return 0; } -#endif - -/* AddTraceback */ - #include "compile.h" -#include "frameobject.h" -#include "traceback.h" -#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API - #ifndef Py_BUILD_CORE - #define Py_BUILD_CORE 1 - #endif - #include "internal/pycore_frame.h" -#endif -#if CYTHON_COMPILING_IN_LIMITED_API -static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict, - PyObject *firstlineno, PyObject *name) { - PyObject *replace = NULL; - if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL; - if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL; - replace = PyObject_GetAttrString(code, "replace"); - if (likely(replace)) { - PyObject *result; - result = PyObject_Call(replace, __pyx_empty_tuple, scratch_dict); - Py_DECREF(replace); - return result; +static int +__pyx_check_suboffsets(Py_buffer *buf, int dim, int ndim, int spec) +{ + CYTHON_UNUSED_VAR(ndim); + if (spec & __Pyx_MEMVIEW_DIRECT) { + if (unlikely(buf->suboffsets && buf->suboffsets[dim] >= 0)) { + PyErr_Format(PyExc_ValueError, + "Buffer not compatible with direct access " + "in dimension %d.", dim); + goto fail; + } } - PyErr_Clear(); - #if __PYX_LIMITED_VERSION_HEX < 0x030780000 - { - PyObject *compiled = NULL, *result = NULL; - if (unlikely(PyDict_SetItemString(scratch_dict, "code", code))) return NULL; - if (unlikely(PyDict_SetItemString(scratch_dict, "type", (PyObject*)(&PyType_Type)))) return NULL; - compiled = Py_CompileString( - "out = type(code)(\n" - " code.co_argcount, code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize,\n" - " code.co_flags, code.co_code, code.co_consts, code.co_names,\n" - " code.co_varnames, code.co_filename, co_name, co_firstlineno,\n" - " code.co_lnotab)\n", "", Py_file_input); - if (!compiled) return NULL; - result = PyEval_EvalCode(compiled, scratch_dict, scratch_dict); - Py_DECREF(compiled); - if (!result) PyErr_Print(); - Py_DECREF(result); - result = PyDict_GetItemString(scratch_dict, "out"); - if (result) Py_INCREF(result); - return result; + if (spec & __Pyx_MEMVIEW_PTR) { + if (unlikely(!buf->suboffsets || (buf->suboffsets[dim] < 0))) { + PyErr_Format(PyExc_ValueError, + "Buffer is not indirectly accessible " + "in dimension %d.", dim); + goto fail; + } } - #else - return NULL; - #endif + return 1; +fail: + return 0; } -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL; - PyObject *replace = NULL, *getframe = NULL, *frame = NULL; - PyObject *exc_type, *exc_value, *exc_traceback; - int success = 0; - if (c_line) { - (void) __pyx_cfilenm; - (void) __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line); - } - PyErr_Fetch(&exc_type, &exc_value, &exc_traceback); - code_object = Py_CompileString("_getframe()", filename, Py_eval_input); - if (unlikely(!code_object)) goto bad; - py_py_line = PyLong_FromLong(py_line); - if (unlikely(!py_py_line)) goto bad; - py_funcname = PyUnicode_FromString(funcname); - if (unlikely(!py_funcname)) goto bad; - dict = PyDict_New(); - if (unlikely(!dict)) goto bad; - { - PyObject *old_code_object = code_object; - code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname); - Py_DECREF(old_code_object); - } - if (unlikely(!code_object)) goto bad; - getframe = PySys_GetObject("_getframe"); - if (unlikely(!getframe)) goto bad; - if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad; - frame = PyEval_EvalCode(code_object, dict, dict); - if (unlikely(!frame) || frame == Py_None) goto bad; - success = 1; - bad: - PyErr_Restore(exc_type, exc_value, exc_traceback); - Py_XDECREF(code_object); - Py_XDECREF(py_py_line); - Py_XDECREF(py_funcname); - Py_XDECREF(dict); - Py_XDECREF(replace); - if (success) { - PyTraceBack_Here( - (struct _frame*)frame); +static int +__pyx_verify_contig(Py_buffer *buf, int ndim, int c_or_f_flag) +{ + int i; + if (c_or_f_flag & __Pyx_IS_F_CONTIG) { + Py_ssize_t stride = 1; + for (i = 0; i < ndim; i++) { + if (unlikely(stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1)) { + PyErr_SetString(PyExc_ValueError, + "Buffer not fortran contiguous."); + goto fail; + } + stride = stride * buf->shape[i]; + } + } else if (c_or_f_flag & __Pyx_IS_C_CONTIG) { + Py_ssize_t stride = 1; + for (i = ndim - 1; i >- 1; i--) { + if (unlikely(stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1)) { + PyErr_SetString(PyExc_ValueError, + "Buffer not C contiguous."); + goto fail; + } + stride = stride * buf->shape[i]; + } } - Py_XDECREF(frame); + return 1; +fail: + return 0; } -#else -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = NULL; - PyObject *py_funcname = NULL; - #if PY_MAJOR_VERSION < 3 - PyObject *py_srcfile = NULL; - py_srcfile = PyString_FromString(filename); - if (!py_srcfile) goto bad; - #endif - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - if (!py_funcname) goto bad; - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - if (!py_funcname) goto bad; - funcname = PyUnicode_AsUTF8(py_funcname); - if (!funcname) goto bad; - #endif +static int __Pyx_ValidateAndInit_memviewslice( + int *axes_specs, + int c_or_f_flag, + int buf_flags, + int ndim, + __Pyx_TypeInfo *dtype, + __Pyx_BufFmt_StackElem stack[], + __Pyx_memviewslice *memviewslice, + PyObject *original_obj) +{ + struct __pyx_memoryview_obj *memview, *new_memview; + __Pyx_RefNannyDeclarations + Py_buffer *buf; + int i, spec = 0, retval = -1; + __Pyx_BufFmt_Context ctx; + int from_memoryview = __pyx_memoryview_check(original_obj); + __Pyx_RefNannySetupContext("ValidateAndInit_memviewslice", 0); + if (from_memoryview && __pyx_typeinfo_cmp(dtype, ((struct __pyx_memoryview_obj *) + original_obj)->typeinfo)) { + memview = (struct __pyx_memoryview_obj *) original_obj; + new_memview = NULL; + } else { + memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( + original_obj, buf_flags, 0, dtype); + new_memview = memview; + if (unlikely(!memview)) + goto fail; } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - if (!py_funcname) goto bad; - #endif + buf = &memview->view; + if (unlikely(buf->ndim != ndim)) { + PyErr_Format(PyExc_ValueError, + "Buffer has wrong number of dimensions (expected %d, got %d)", + ndim, buf->ndim); + goto fail; } - #if PY_MAJOR_VERSION < 3 - py_code = __Pyx_PyCode_New( - 0, - 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); - #else - py_code = PyCode_NewEmpty(filename, funcname, py_line); - #endif - Py_XDECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_funcname); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_srcfile); - #endif - 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; - PyObject *ptype, *pvalue, *ptraceback; - if (c_line) { - c_line = __Pyx_CLineForTraceback(tstate, c_line); + if (new_memview) { + __Pyx_BufFmt_Init(&ctx, stack, dtype); + if (unlikely(!__Pyx_BufFmt_CheckString(&ctx, buf->format))) goto fail; } - py_code = __pyx_find_code_object(c_line ? -c_line : py_line); - if (!py_code) { - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) { - /* If the code object creation fails, then we should clear the - fetched exception references and propagate the new exception */ - Py_XDECREF(ptype); - Py_XDECREF(pvalue); - Py_XDECREF(ptraceback); - goto bad; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + if (unlikely((unsigned) buf->itemsize != dtype->size)) { + PyErr_Format(PyExc_ValueError, + "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "u byte%s) " + "does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "u byte%s)", + buf->itemsize, + (buf->itemsize > 1) ? "s" : "", + dtype->name, + dtype->size, + (dtype->size > 1) ? "s" : ""); + goto fail; } - 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); -} -#endif - -/* 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;\ + if (buf->len > 0) { + for (i = 0; i < ndim; i++) { + spec = axes_specs[i]; + if (unlikely(!__pyx_check_strides(buf, i, ndim, spec))) + goto fail; + if (unlikely(!__pyx_check_suboffsets(buf, i, ndim, spec))) + goto fail; + } + if (unlikely(buf->strides && !__pyx_verify_contig(buf, ndim, c_or_f_flag))) + goto fail; } - -#if PY_MAJOR_VERSION < 3 -static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) { - __Pyx_TypeName obj_type_name; - if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags); - if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags); - if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags); - obj_type_name = __Pyx_PyType_GetName(Py_TYPE(obj)); - PyErr_Format(PyExc_TypeError, - "'" __Pyx_FMT_TYPENAME "' does not have the buffer interface", - obj_type_name); - __Pyx_DECREF_TypeName(obj_type_name); - return -1; -} -static void __Pyx_ReleaseBuffer(Py_buffer *view) { - PyObject *obj = view->obj; - if (!obj) return; - if (PyObject_CheckBuffer(obj)) { - PyBuffer_Release(view); - return; + if (unlikely(__Pyx_init_memviewslice(memview, ndim, memviewslice, + new_memview != NULL) == -1)) { + goto fail; } - if ((0)) {} - view->obj = NULL; - Py_DECREF(obj); + retval = 0; + goto no_fail; +fail: + Py_XDECREF(new_memview); + retval = -1; +no_fail: + __Pyx_RefNannyFinishContext(); + return retval; } -#endif - - /* MemviewSliceIsContig */ - static int -__pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim) -{ - int i, index, step, start; - Py_ssize_t itemsize = mvs.memview->view.itemsize; - if (order == 'F') { - step = 1; - start = 0; - } else { - step = -1; - start = ndim - 1; - } - for (i = 0; i < ndim; i++) { - index = start + step * i; - if (mvs.suboffsets[index] >= 0 || mvs.strides[index] != itemsize) - return 0; - itemsize *= mvs.shape[index]; +/* ObjectToMemviewSlice */ + static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_nn_uint16_t(PyObject *obj, int writable_flag) { + __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; + __Pyx_BufFmt_StackElem stack[1]; + int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; + int retcode; + if (obj == Py_None) { + result.memview = (struct __pyx_memoryview_obj *) Py_None; + return result; } - return 1; + retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, + PyBUF_RECORDS_RO | writable_flag, 1, + &__Pyx_TypeInfo_nn_uint16_t, stack, + &result, obj); + if (unlikely(retcode == -1)) + goto __pyx_fail; + return result; +__pyx_fail: + result.memview = NULL; + result.data = NULL; + return result; } -/* OverlappingSlices */ - static void -__pyx_get_array_memory_extents(__Pyx_memviewslice *slice, - void **out_start, void **out_end, - int ndim, size_t itemsize) -{ - char *start, *end; - int i; - start = end = slice->data; - for (i = 0; i < ndim; i++) { - Py_ssize_t stride = slice->strides[i]; - Py_ssize_t extent = slice->shape[i]; - if (extent == 0) { - *out_start = *out_end = start; - return; - } else { - if (stride > 0) - end += stride * (extent - 1); - else - start += stride * (extent - 1); - } - } - *out_start = start; - *out_end = end + itemsize; +/* MemviewDtypeToObject */ + static CYTHON_INLINE PyObject *__pyx_memview_get_nn_uint16_t(const char *itemp) { + return (PyObject *) __Pyx_PyInt_From_uint16_t(*(uint16_t *) itemp); } -static int -__pyx_slices_overlap(__Pyx_memviewslice *slice1, - __Pyx_memviewslice *slice2, - int ndim, size_t itemsize) -{ - void *start1, *end1, *start2, *end2; - __pyx_get_array_memory_extents(slice1, &start1, &end1, ndim, itemsize); - __pyx_get_array_memory_extents(slice2, &start2, &end2, ndim, itemsize); - return (start1 < end2) && (start2 < end1); +static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObject *obj) { + uint16_t value = __Pyx_PyInt_As_uint16_t(obj); + if (unlikely((value == ((uint16_t)-1)) && PyErr_Occurred())) + return 0; + *(uint16_t *) itemp = value; + return 1; } /* Declarations */ #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - return ::std::complex< float >(x, y); + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + return ::std::complex< long double >(x, y); } #else - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - return x + y*(__pyx_t_float_complex)_Complex_I; + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + return x + y*(__pyx_t_long_double_complex)_Complex_I; } #endif #else - static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) { - __pyx_t_float_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { + __pyx_t_long_double_complex z; z.real = x; z.imag = y; return z; @@ -47671,88 +53511,88 @@ __pyx_slices_overlap(__Pyx_memviewslice *slice1, /* Arithmetic */ #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) #else - static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { return (a.real == b.real) && (a.imag == b.imag); } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; z.real = a.real + b.real; z.imag = a.imag + b.imag; return z; } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; z.real = a.real - b.real; z.imag = a.imag - b.imag; return z; } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; z.real = a.real * b.real - a.imag * b.imag; z.imag = a.real * b.imag + a.imag * b.real; return z; } #if 1 - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { if (b.imag == 0) { - return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); - } else if (fabsf(b.real) >= fabsf(b.imag)) { + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); + } else if (fabsl(b.real) >= fabsl(b.imag)) { if (b.real == 0 && b.imag == 0) { - return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag); + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.imag); } else { - float r = b.imag / b.real; - float s = (float)(1.0) / (b.real + b.imag * r); - return __pyx_t_float_complex_from_parts( + long double r = b.imag / b.real; + long double s = (long double)(1.0) / (b.real + b.imag * r); + return __pyx_t_long_double_complex_from_parts( (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); } } else { - float r = b.real / b.imag; - float s = (float)(1.0) / (b.imag + b.real * r); - return __pyx_t_float_complex_from_parts( + long double r = b.real / b.imag; + long double s = (long double)(1.0) / (b.imag + b.real * r); + return __pyx_t_long_double_complex_from_parts( (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); } } #else - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { if (b.imag == 0) { - return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real); + return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); } else { - float denom = b.real * b.real + b.imag * b.imag; - return __pyx_t_float_complex_from_parts( + long double denom = b.real * b.real + b.imag * b.imag; + return __pyx_t_long_double_complex_from_parts( (a.real * b.real + a.imag * b.imag) / denom, (a.imag * b.real - a.real * b.imag) / denom); } } #endif - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) { - __pyx_t_float_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex a) { + __pyx_t_long_double_complex z; z.real = -a.real; z.imag = -a.imag; return z; } - static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) { + static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex a) { return (a.real == 0) && (a.imag == 0); } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) { - __pyx_t_float_complex z; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex a) { + __pyx_t_long_double_complex z; z.real = a.real; z.imag = -a.imag; return z; } #if 1 - static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) { + static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex z) { #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrtf(z.real*z.real + z.imag*z.imag); + return sqrtl(z.real*z.real + z.imag*z.imag); #else - return hypotf(z.real, z.imag); + return hypotl(z.real, z.imag); #endif } - static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) { - __pyx_t_float_complex z; - float r, lnr, theta, z_r, z_theta; + static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { + __pyx_t_long_double_complex z; + long double r, lnr, theta, z_r, z_theta; if (b.imag == 0 && b.real == (int)b.real) { if (b.real < 0) { - float denom = a.real * a.real + a.imag * a.imag; + long double denom = a.real * a.real + a.imag * a.imag; a.real = a.real / denom; a.imag = -a.imag / denom; b.real = -b.real; @@ -47765,20 +53605,20 @@ __pyx_slices_overlap(__Pyx_memviewslice *slice1, case 1: return a; case 2: - return __Pyx_c_prod_float(a, a); + return __Pyx_c_prod_long__double(a, a); case 3: - z = __Pyx_c_prod_float(a, a); - return __Pyx_c_prod_float(z, a); + z = __Pyx_c_prod_long__double(a, a); + return __Pyx_c_prod_long__double(z, a); case 4: - z = __Pyx_c_prod_float(a, a); - return __Pyx_c_prod_float(z, z); + z = __Pyx_c_prod_long__double(a, a); + return __Pyx_c_prod_long__double(z, z); } } if (a.imag == 0) { if (a.real == 0) { return a; } else if ((b.imag == 0) && (a.real >= 0)) { - z.real = powf(a.real, b.real); + z.real = powl(a.real, b.real); z.imag = 0; return z; } else if (a.real > 0) { @@ -47786,617 +53626,1054 @@ __pyx_slices_overlap(__Pyx_memviewslice *slice1, theta = 0; } else { r = -a.real; - theta = atan2f(0.0, -1.0); + theta = atan2l(0.0, -1.0); } } else { - r = __Pyx_c_abs_float(a); - theta = atan2f(a.imag, a.real); + r = __Pyx_c_abs_long__double(a); + theta = atan2l(a.imag, a.real); } - lnr = logf(r); - z_r = expf(lnr * b.real - theta * b.imag); + lnr = logl(r); + z_r = expl(lnr * b.real - theta * b.imag); z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cosf(z_theta); - z.imag = z_r * sinf(z_theta); + z.real = z_r * cosl(z_theta); + z.imag = z_r * sinl(z_theta); return z; } #endif #endif -/* Declarations */ - #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) - #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - return ::std::complex< double >(x, y); +/* CIntFromPy */ + static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(unsigned char) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(unsigned char, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned char) val; + } } - #else - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - return x + y*(__pyx_t_double_complex)_Complex_I; +#endif + if (unlikely(!PyLong_Check(x))) { + unsigned char val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned char) -1; + val = __Pyx_PyInt_As_unsigned_char(tmp); + Py_DECREF(tmp); + return val; } - #endif + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(unsigned char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) >= 2 * PyLong_SHIFT)) { + return (unsigned char) (((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(unsigned char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) >= 3 * PyLong_SHIFT)) { + return (unsigned char) (((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(unsigned char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) >= 4 * PyLong_SHIFT)) { + return (unsigned char) (((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + } + } + break; + } + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } #else - static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) { - __pyx_t_double_complex z; - z.real = x; - z.imag = y; - return z; + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (unsigned char) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(unsigned char) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(unsigned char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(unsigned char) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned char) (((unsigned char)-1)*(((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(unsigned char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned char) ((((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned char) (((unsigned char)-1)*(((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(unsigned char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned char) ((((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned char) (((unsigned char)-1)*(((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(unsigned char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned char) ((((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(unsigned char) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned char, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(unsigned char) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned char, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { + unsigned char val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; + } +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (unsigned char) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (unsigned char) -1; + } + is_negative = result == 1; + } + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (unsigned char) -1; + } else { + stepval = v; + } + v = NULL; + val = (unsigned char) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(unsigned char) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((unsigned char) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(unsigned char) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((unsigned char) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((unsigned char) 1) << (sizeof(unsigned char) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (unsigned char) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned char"); + return (unsigned char) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned char"); + return (unsigned char) -1; +} + +/* MemviewSliceCopyTemplate */ + static __Pyx_memviewslice +__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, + const char *mode, int ndim, + size_t sizeof_dtype, int contig_flag, + int dtype_is_object) +{ + __Pyx_RefNannyDeclarations + int i; + __Pyx_memviewslice new_mvs = { 0, 0, { 0 }, { 0 }, { 0 } }; + struct __pyx_memoryview_obj *from_memview = from_mvs->memview; + Py_buffer *buf = &from_memview->view; + PyObject *shape_tuple = NULL; + PyObject *temp_int = NULL; + struct __pyx_array_obj *array_obj = NULL; + struct __pyx_memoryview_obj *memview_obj = NULL; + __Pyx_RefNannySetupContext("__pyx_memoryview_copy_new_contig", 0); + for (i = 0; i < ndim; i++) { + if (unlikely(from_mvs->suboffsets[i] >= 0)) { + PyErr_Format(PyExc_ValueError, "Cannot copy memoryview slice with " + "indirect dimensions (axis %d)", i); + goto fail; + } } -#endif - -/* Arithmetic */ - #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) -#else - static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - return (a.real == b.real) && (a.imag == b.imag); + shape_tuple = PyTuple_New(ndim); + if (unlikely(!shape_tuple)) { + goto fail; } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real + b.real; - z.imag = a.imag + b.imag; - return z; + __Pyx_GOTREF(shape_tuple); + for(i = 0; i < ndim; i++) { + temp_int = PyInt_FromSsize_t(from_mvs->shape[i]); + if(unlikely(!temp_int)) { + goto fail; + } else { + PyTuple_SET_ITEM(shape_tuple, i, temp_int); + temp_int = NULL; + } } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real - b.real; - z.imag = a.imag - b.imag; - return z; + array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, (char *) mode, NULL); + if (unlikely(!array_obj)) { + goto fail; } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - z.real = a.real * b.real - a.imag * b.imag; - z.imag = a.real * b.imag + a.imag * b.real; - return z; + __Pyx_GOTREF(array_obj); + memview_obj = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( + (PyObject *) array_obj, contig_flag, + dtype_is_object, + from_mvs->memview->typeinfo); + if (unlikely(!memview_obj)) + goto fail; + if (unlikely(__Pyx_init_memviewslice(memview_obj, ndim, &new_mvs, 1) < 0)) + goto fail; + if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim, + dtype_is_object) < 0)) + goto fail; + goto no_fail; +fail: + __Pyx_XDECREF(new_mvs.memview); + new_mvs.memview = NULL; + new_mvs.data = NULL; +no_fail: + __Pyx_XDECREF(shape_tuple); + __Pyx_XDECREF(temp_int); + __Pyx_XDECREF(array_obj); + __Pyx_RefNannyFinishContext(); + return new_mvs; +} + +/* MemviewSliceInit */ + static int +__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, + int ndim, + __Pyx_memviewslice *memviewslice, + int memview_is_new_reference) +{ + __Pyx_RefNannyDeclarations + int i, retval=-1; + Py_buffer *buf = &memview->view; + __Pyx_RefNannySetupContext("init_memviewslice", 0); + if (unlikely(memviewslice->memview || memviewslice->data)) { + PyErr_SetString(PyExc_ValueError, + "memviewslice is already initialized!"); + goto fail; } - #if 1 - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - if (b.imag == 0) { - return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); - } else if (fabs(b.real) >= fabs(b.imag)) { - if (b.real == 0 && b.imag == 0) { - return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag); - } else { - double r = b.imag / b.real; - double s = (double)(1.0) / (b.real + b.imag * r); - return __pyx_t_double_complex_from_parts( - (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); - } - } else { - double r = b.real / b.imag; - double s = (double)(1.0) / (b.imag + b.real * r); - return __pyx_t_double_complex_from_parts( - (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + if (buf->strides) { + for (i = 0; i < ndim; i++) { + memviewslice->strides[i] = buf->strides[i]; + } + } else { + Py_ssize_t stride = buf->itemsize; + for (i = ndim - 1; i >= 0; i--) { + memviewslice->strides[i] = stride; + stride *= buf->shape[i]; } } - #else - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - if (b.imag == 0) { - return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real); + for (i = 0; i < ndim; i++) { + memviewslice->shape[i] = buf->shape[i]; + if (buf->suboffsets) { + memviewslice->suboffsets[i] = buf->suboffsets[i]; } else { - double denom = b.real * b.real + b.imag * b.imag; - return __pyx_t_double_complex_from_parts( - (a.real * b.real + a.imag * b.imag) / denom, - (a.imag * b.real - a.real * b.imag) / denom); + memviewslice->suboffsets[i] = -1; } } - #endif - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) { - __pyx_t_double_complex z; - z.real = -a.real; - z.imag = -a.imag; - return z; - } - static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) { - return (a.real == 0) && (a.imag == 0); + memviewslice->memview = memview; + memviewslice->data = (char *)buf->buf; + if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { + Py_INCREF(memview); } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) { - __pyx_t_double_complex z; - z.real = a.real; - z.imag = -a.imag; - return z; + retval = 0; + goto no_fail; +fail: + memviewslice->memview = 0; + memviewslice->data = 0; + retval = -1; +no_fail: + __Pyx_RefNannyFinishContext(); + return retval; +} +#ifndef Py_NO_RETURN +#define Py_NO_RETURN +#endif +static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN { + va_list vargs; + char msg[200]; +#if PY_VERSION_HEX >= 0x030A0000 || defined(HAVE_STDARG_PROTOTYPES) + va_start(vargs, fmt); +#else + va_start(vargs); +#endif + vsnprintf(msg, 200, fmt, vargs); + va_end(vargs); + Py_FatalError(msg); +} +static CYTHON_INLINE int +__pyx_add_acquisition_count_locked(__pyx_atomic_int_type *acquisition_count, + PyThread_type_lock lock) +{ + int result; + PyThread_acquire_lock(lock, 1); + result = (*acquisition_count)++; + PyThread_release_lock(lock); + return result; +} +static CYTHON_INLINE int +__pyx_sub_acquisition_count_locked(__pyx_atomic_int_type *acquisition_count, + PyThread_type_lock lock) +{ + int result; + PyThread_acquire_lock(lock, 1); + result = (*acquisition_count)--; + PyThread_release_lock(lock); + return result; +} +static CYTHON_INLINE void +__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) +{ + __pyx_nonatomic_int_type old_acquisition_count; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + return; } - #if 1 - static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) { - #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrt(z.real*z.real + z.imag*z.imag); - #else - return hypot(z.real, z.imag); - #endif - } - static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) { - __pyx_t_double_complex z; - double r, lnr, theta, z_r, z_theta; - if (b.imag == 0 && b.real == (int)b.real) { - if (b.real < 0) { - double denom = a.real * a.real + a.imag * a.imag; - a.real = a.real / denom; - a.imag = -a.imag / denom; - b.real = -b.real; - } - switch ((int)b.real) { - case 0: - z.real = 1; - z.imag = 0; - return z; - case 1: - return a; - case 2: - return __Pyx_c_prod_double(a, a); - case 3: - z = __Pyx_c_prod_double(a, a); - return __Pyx_c_prod_double(z, a); - case 4: - z = __Pyx_c_prod_double(a, a); - return __Pyx_c_prod_double(z, z); - } - } - if (a.imag == 0) { - if (a.real == 0) { - return a; - } else if ((b.imag == 0) && (a.real >= 0)) { - z.real = pow(a.real, b.real); - z.imag = 0; - return z; - } else if (a.real > 0) { - r = a.real; - theta = 0; - } else { - r = -a.real; - theta = atan2(0.0, -1.0); - } + old_acquisition_count = __pyx_add_acquisition_count(memview); + if (unlikely(old_acquisition_count <= 0)) { + if (likely(old_acquisition_count == 0)) { + if (have_gil) { + Py_INCREF((PyObject *) memview); } else { - r = __Pyx_c_abs_double(a); - theta = atan2(a.imag, a.real); + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_INCREF((PyObject *) memview); + PyGILState_Release(_gilstate); } - lnr = log(r); - z_r = exp(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cos(z_theta); - z.imag = z_r * sin(z_theta); - return z; - } - #endif -#endif - -/* TypeInfoCompare */ - static int -__pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b) -{ - int i; - if (!a || !b) - return 0; - if (a == b) - return 1; - if (a->size != b->size || a->typegroup != b->typegroup || - a->is_unsigned != b->is_unsigned || a->ndim != b->ndim) { - if (a->typegroup == 'H' || b->typegroup == 'H') { - return a->size == b->size; } else { - return 0; + __pyx_fatalerror("Acquisition count is %d (line %d)", + old_acquisition_count+1, lineno); } } - if (a->ndim) { - for (i = 0; i < a->ndim; i++) - if (a->arraysize[i] != b->arraysize[i]) - return 0; +} +static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, + int have_gil, int lineno) { + __pyx_nonatomic_int_type old_acquisition_count; + struct __pyx_memoryview_obj *memview = memslice->memview; + if (unlikely(!memview || (PyObject *) memview == Py_None)) { + memslice->memview = NULL; + return; } - if (a->typegroup == 'S') { - if (a->flags != b->flags) - return 0; - if (a->fields || b->fields) { - if (!(a->fields && b->fields)) - return 0; - for (i = 0; a->fields[i].type && b->fields[i].type; i++) { - __Pyx_StructField *field_a = a->fields + i; - __Pyx_StructField *field_b = b->fields + i; - if (field_a->offset != field_b->offset || - !__pyx_typeinfo_cmp(field_a->type, field_b->type)) - return 0; - } - return !a->fields[i].type && !b->fields[i].type; + old_acquisition_count = __pyx_sub_acquisition_count(memview); + memslice->data = NULL; + if (likely(old_acquisition_count > 1)) { + memslice->memview = NULL; + } else if (likely(old_acquisition_count == 1)) { + if (have_gil) { + Py_CLEAR(memslice->memview); + } else { + PyGILState_STATE _gilstate = PyGILState_Ensure(); + Py_CLEAR(memslice->memview); + PyGILState_Release(_gilstate); } + } else { + __pyx_fatalerror("Acquisition count is %d (line %d)", + old_acquisition_count-1, lineno); } - return 1; } -/* MemviewSliceValidateAndInit */ - static int -__pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec) -{ - if (buf->shape[dim] <= 1) - return 1; - if (buf->strides) { - if (spec & __Pyx_MEMVIEW_CONTIG) { - if (spec & (__Pyx_MEMVIEW_PTR|__Pyx_MEMVIEW_FULL)) { - if (unlikely(buf->strides[dim] != sizeof(void *))) { - PyErr_Format(PyExc_ValueError, - "Buffer is not indirectly contiguous " - "in dimension %d.", dim); - goto fail; - } - } else if (unlikely(buf->strides[dim] != buf->itemsize)) { - PyErr_SetString(PyExc_ValueError, - "Buffer and memoryview are not contiguous " - "in the same dimension."); - goto fail; +/* CIntFromPy */ + static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int neg_one = (int) -1, const_zero = (int) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + 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; } - if (spec & __Pyx_MEMVIEW_FOLLOW) { - Py_ssize_t stride = buf->strides[dim]; - if (stride < 0) - stride = -stride; - if (unlikely(stride < buf->itemsize)) { - PyErr_SetString(PyExc_ValueError, - "Buffer and memoryview are not contiguous " - "in the same dimension."); - goto fail; + } +#endif + if (unlikely(!PyLong_Check(x))) { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + 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 && PY_VERSION_HEX < 0x030C00A7 + 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 (unlikely(spec & __Pyx_MEMVIEW_CONTIG && dim != ndim - 1)) { - PyErr_Format(PyExc_ValueError, - "C-contiguous buffer is not contiguous in " - "dimension %d", dim); - goto fail; - } else if (unlikely(spec & (__Pyx_MEMVIEW_PTR))) { - PyErr_Format(PyExc_ValueError, - "C-contiguous buffer is not indirect in " - "dimension %d", dim); - goto fail; - } else if (unlikely(buf->suboffsets)) { - PyErr_SetString(PyExc_ValueError, - "Buffer exposes suboffsets but no strides"); - goto fail; +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + } else { + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + 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; + } } - } - return 1; -fail: - return 0; -} -static int -__pyx_check_suboffsets(Py_buffer *buf, int dim, int ndim, int spec) -{ - CYTHON_UNUSED_VAR(ndim); - if (spec & __Pyx_MEMVIEW_DIRECT) { - if (unlikely(buf->suboffsets && buf->suboffsets[dim] >= 0)) { - PyErr_Format(PyExc_ValueError, - "Buffer not compatible with direct access " - "in dimension %d.", dim); - goto fail; +#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 (spec & __Pyx_MEMVIEW_PTR) { - if (unlikely(!buf->suboffsets || (buf->suboffsets[dim] < 0))) { - PyErr_Format(PyExc_ValueError, - "Buffer is not indirectly accessible " - "in dimension %d.", dim); - goto fail; + { + int val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; } - } - return 1; -fail: - return 0; -} -static int -__pyx_verify_contig(Py_buffer *buf, int ndim, int c_or_f_flag) -{ - int i; - if (c_or_f_flag & __Pyx_IS_F_CONTIG) { - Py_ssize_t stride = 1; - for (i = 0; i < ndim; i++) { - if (unlikely(stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1)) { - PyErr_SetString(PyExc_ValueError, - "Buffer not fortran contiguous."); - goto fail; - } - stride = stride * buf->shape[i]; +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (int) -1; + assert(PyLong_CheckExact(v)); } - } else if (c_or_f_flag & __Pyx_IS_C_CONTIG) { - Py_ssize_t stride = 1; - for (i = ndim - 1; i >- 1; i--) { - if (unlikely(stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1)) { - PyErr_SetString(PyExc_ValueError, - "Buffer not C contiguous."); - goto fail; + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (int) -1; } - stride = stride * buf->shape[i]; + is_negative = result == 1; } - } - return 1; -fail: - return 0; -} -static int __Pyx_ValidateAndInit_memviewslice( - int *axes_specs, - int c_or_f_flag, - int buf_flags, - int ndim, - __Pyx_TypeInfo *dtype, - __Pyx_BufFmt_StackElem stack[], - __Pyx_memviewslice *memviewslice, - PyObject *original_obj) -{ - struct __pyx_memoryview_obj *memview, *new_memview; - __Pyx_RefNannyDeclarations - Py_buffer *buf; - int i, spec = 0, retval = -1; - __Pyx_BufFmt_Context ctx; - int from_memoryview = __pyx_memoryview_check(original_obj); - __Pyx_RefNannySetupContext("ValidateAndInit_memviewslice", 0); - if (from_memoryview && __pyx_typeinfo_cmp(dtype, ((struct __pyx_memoryview_obj *) - original_obj)->typeinfo)) { - memview = (struct __pyx_memoryview_obj *) original_obj; - new_memview = NULL; - } else { - memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( - original_obj, buf_flags, 0, dtype); - new_memview = memview; - if (unlikely(!memview)) - goto fail; - } - buf = &memview->view; - if (unlikely(buf->ndim != ndim)) { - PyErr_Format(PyExc_ValueError, - "Buffer has wrong number of dimensions (expected %d, got %d)", - ndim, buf->ndim); - goto fail; - } - if (new_memview) { - __Pyx_BufFmt_Init(&ctx, stack, dtype); - if (unlikely(!__Pyx_BufFmt_CheckString(&ctx, buf->format))) goto fail; - } - if (unlikely((unsigned) buf->itemsize != dtype->size)) { - PyErr_Format(PyExc_ValueError, - "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "u byte%s) " - "does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "u byte%s)", - buf->itemsize, - (buf->itemsize > 1) ? "s" : "", - dtype->name, - dtype->size, - (dtype->size > 1) ? "s" : ""); - goto fail; - } - if (buf->len > 0) { - for (i = 0; i < ndim; i++) { - spec = axes_specs[i]; - if (unlikely(!__pyx_check_strides(buf, i, ndim, spec))) - goto fail; - if (unlikely(!__pyx_check_suboffsets(buf, i, ndim, spec))) - goto fail; + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (int) -1; + } else { + stepval = v; } - if (unlikely(buf->strides && !__pyx_verify_contig(buf, ndim, c_or_f_flag))) - goto fail; - } - if (unlikely(__Pyx_init_memviewslice(memview, ndim, memviewslice, - new_memview != NULL) == -1)) { - goto fail; - } - retval = 0; - goto no_fail; -fail: - Py_XDECREF(new_memview); - retval = -1; -no_fail: - __Pyx_RefNannyFinishContext(); - return retval; -} - -/* ObjectToMemviewSlice */ - static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_ds_nn_uint16_t(PyObject *obj, int writable_flag) { - __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } }; - __Pyx_BufFmt_StackElem stack[1]; - int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_STRIDED) }; - int retcode; - if (obj == Py_None) { - result.memview = (struct __pyx_memoryview_obj *) Py_None; - return result; + v = NULL; + val = (int) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((int) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((int) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); +#endif + if (unlikely(ret)) + return (int) -1; + return val; } - retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, 0, - PyBUF_RECORDS_RO | writable_flag, 1, - &__Pyx_TypeInfo_nn_uint16_t, stack, - &result, obj); - if (unlikely(retcode == -1)) - goto __pyx_fail; - return result; -__pyx_fail: - result.memview = NULL; - result.data = NULL; - return result; -} - -/* MemviewDtypeToObject */ - static CYTHON_INLINE PyObject *__pyx_memview_get_nn_uint16_t(const char *itemp) { - return (PyObject *) __Pyx_PyInt_From_uint16_t(*(uint16_t *) itemp); -} -static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObject *obj) { - uint16_t value = __Pyx_PyInt_As_uint16_t(obj); - if (unlikely((value == ((uint16_t)-1)) && PyErr_Occurred())) - return 0; - *(uint16_t *) itemp = value; - return 1; +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; } -/* Declarations */ - #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) - #ifdef __cplusplus - static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { - return ::std::complex< long double >(x, y); - } - #else - static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { - return x + y*(__pyx_t_long_double_complex)_Complex_I; - } - #endif -#else - static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) { - __pyx_t_long_double_complex z; - z.real = x; - z.imag = y; - return z; - } +/* CIntFromPy */ + static CYTHON_INLINE uint64_t __Pyx_PyInt_As_uint64_t(PyObject *x) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" #endif - -/* Arithmetic */ - #if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus) -#else - static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { - return (a.real == b.real) && (a.imag == b.imag); - } - static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { - __pyx_t_long_double_complex z; - z.real = a.real + b.real; - z.imag = a.imag + b.imag; - return z; - } - static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { - __pyx_t_long_double_complex z; - z.real = a.real - b.real; - z.imag = a.imag - b.imag; - return z; + const uint64_t neg_one = (uint64_t) -1, const_zero = (uint64_t) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if ((sizeof(uint64_t) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(uint64_t, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (uint64_t) val; + } } - static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { - __pyx_t_long_double_complex z; - z.real = a.real * b.real - a.imag * b.imag; - z.imag = a.real * b.imag + a.imag * b.real; - return z; +#endif + if (unlikely(!PyLong_Check(x))) { + uint64_t val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (uint64_t) -1; + val = __Pyx_PyInt_As_uint64_t(tmp); + Py_DECREF(tmp); + return val; } - #if 1 - static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { - if (b.imag == 0) { - return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); - } else if (fabsl(b.real) >= fabsl(b.imag)) { - if (b.real == 0 && b.imag == 0) { - return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.imag); - } else { - long double r = b.imag / b.real; - long double s = (long double)(1.0) / (b.real + b.imag * r); - return __pyx_t_long_double_complex_from_parts( - (a.real + a.imag * r) * s, (a.imag - a.real * r) * s); - } + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + if (unlikely(__Pyx_PyLong_IsNeg(x))) { + goto raise_neg_overflow; + } else if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(uint64_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) } else { - long double r = b.real / b.imag; - long double s = (long double)(1.0) / (b.imag + b.real * r); - return __pyx_t_long_double_complex_from_parts( - (a.real * r + a.imag) * s, (a.imag * r - a.real) * s); + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_DigitCount(x)) { + case 2: + if ((8 * sizeof(uint64_t) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint64_t) >= 2 * PyLong_SHIFT)) { + return (uint64_t) (((((uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0])); + } + } + break; + case 3: + if ((8 * sizeof(uint64_t) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint64_t) >= 3 * PyLong_SHIFT)) { + return (uint64_t) (((((((uint64_t)digits[2]) << PyLong_SHIFT) | (uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0])); + } + } + break; + case 4: + if ((8 * sizeof(uint64_t) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, 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(uint64_t) >= 4 * PyLong_SHIFT)) { + return (uint64_t) (((((((((uint64_t)digits[3]) << PyLong_SHIFT) | (uint64_t)digits[2]) << PyLong_SHIFT) | (uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0])); + } + } + break; + } } - } - #else - static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { - if (b.imag == 0) { - return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real); +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 + 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 (uint64_t) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if ((sizeof(uint64_t) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(uint64_t, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(uint64_t) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(uint64_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + if (__Pyx_PyLong_IsCompact(x)) { + __PYX_VERIFY_RETURN_INT(uint64_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) } else { - long double denom = b.real * b.real + b.imag * b.imag; - return __pyx_t_long_double_complex_from_parts( - (a.real * b.real + a.imag * b.imag) / denom, - (a.imag * b.real - a.real * b.imag) / denom); + const digit* digits = __Pyx_PyLong_Digits(x); + assert(__Pyx_PyLong_DigitCount(x) > 1); + switch (__Pyx_PyLong_SignedDigitCount(x)) { + case -2: + if ((8 * sizeof(uint64_t) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint64_t) - 1 > 2 * PyLong_SHIFT)) { + return (uint64_t) (((uint64_t)-1)*(((((uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0]))); + } + } + break; + case 2: + if ((8 * sizeof(uint64_t) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint64_t) - 1 > 2 * PyLong_SHIFT)) { + return (uint64_t) ((((((uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0]))); + } + } + break; + case -3: + if ((8 * sizeof(uint64_t) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint64_t) - 1 > 3 * PyLong_SHIFT)) { + return (uint64_t) (((uint64_t)-1)*(((((((uint64_t)digits[2]) << PyLong_SHIFT) | (uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0]))); + } + } + break; + case 3: + if ((8 * sizeof(uint64_t) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint64_t) - 1 > 3 * PyLong_SHIFT)) { + return (uint64_t) ((((((((uint64_t)digits[2]) << PyLong_SHIFT) | (uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0]))); + } + } + break; + case -4: + if ((8 * sizeof(uint64_t) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, 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(uint64_t) - 1 > 4 * PyLong_SHIFT)) { + return (uint64_t) (((uint64_t)-1)*(((((((((uint64_t)digits[3]) << PyLong_SHIFT) | (uint64_t)digits[2]) << PyLong_SHIFT) | (uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0]))); + } + } + break; + case 4: + if ((8 * sizeof(uint64_t) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { + __PYX_VERIFY_RETURN_INT(uint64_t, 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(uint64_t) - 1 > 4 * PyLong_SHIFT)) { + return (uint64_t) ((((((((((uint64_t)digits[3]) << PyLong_SHIFT) | (uint64_t)digits[2]) << PyLong_SHIFT) | (uint64_t)digits[1]) << PyLong_SHIFT) | (uint64_t)digits[0]))); + } + } + break; + } + } +#endif + if ((sizeof(uint64_t) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(uint64_t, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if ((sizeof(uint64_t) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(uint64_t, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif } } - #endif - static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex a) { - __pyx_t_long_double_complex z; - z.real = -a.real; - z.imag = -a.imag; - return z; - } - static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex a) { - return (a.real == 0) && (a.imag == 0); - } - static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex a) { - __pyx_t_long_double_complex z; - z.real = a.real; - z.imag = -a.imag; - return z; - } - #if 1 - static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex z) { - #if !defined(HAVE_HYPOT) || defined(_MSC_VER) - return sqrtl(z.real*z.real + z.imag*z.imag); - #else - return hypotl(z.real, z.imag); - #endif + { + uint64_t val; + int ret = -1; +#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API + Py_ssize_t bytes_copied = PyLong_AsNativeBytes( + x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); + if (unlikely(bytes_copied == -1)) { + } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { + goto raise_overflow; + } else { + ret = 0; } - static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) { - __pyx_t_long_double_complex z; - long double r, lnr, theta, z_r, z_theta; - if (b.imag == 0 && b.real == (int)b.real) { - if (b.real < 0) { - long double denom = a.real * a.real + a.imag * a.imag; - a.real = a.real / denom; - a.imag = -a.imag / denom; - b.real = -b.real; - } - switch ((int)b.real) { - case 0: - z.real = 1; - z.imag = 0; - return z; - case 1: - return a; - case 2: - return __Pyx_c_prod_long__double(a, a); - case 3: - z = __Pyx_c_prod_long__double(a, a); - return __Pyx_c_prod_long__double(z, a); - case 4: - z = __Pyx_c_prod_long__double(a, a); - return __Pyx_c_prod_long__double(z, z); - } - } - if (a.imag == 0) { - if (a.real == 0) { - return a; - } else if ((b.imag == 0) && (a.real >= 0)) { - z.real = powl(a.real, b.real); - z.imag = 0; - return z; - } else if (a.real > 0) { - r = a.real; - theta = 0; - } else { - r = -a.real; - theta = atan2l(0.0, -1.0); - } - } else { - r = __Pyx_c_abs_long__double(a); - theta = atan2l(a.imag, a.real); +#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + ret = _PyLong_AsByteArray((PyLongObject *)x, + bytes, sizeof(val), + is_little, !is_unsigned); +#else + PyObject *v; + PyObject *stepval = NULL, *mask = NULL, *shift = NULL; + int bits, remaining_bits, is_negative = 0; + int chunk_size = (sizeof(long) < 8) ? 30 : 62; + if (likely(PyLong_CheckExact(x))) { + v = __Pyx_NewRef(x); + } else { + v = PyNumber_Long(x); + if (unlikely(!v)) return (uint64_t) -1; + assert(PyLong_CheckExact(v)); + } + { + int result = PyObject_RichCompareBool(v, Py_False, Py_LT); + if (unlikely(result < 0)) { + Py_DECREF(v); + return (uint64_t) -1; } - lnr = logl(r); - z_r = expl(lnr * b.real - theta * b.imag); - z_theta = theta * b.real + lnr * b.imag; - z.real = z_r * cosl(z_theta); - z.imag = z_r * sinl(z_theta); - return z; + is_negative = result == 1; } - #endif + if (is_unsigned && unlikely(is_negative)) { + Py_DECREF(v); + goto raise_neg_overflow; + } else if (is_negative) { + stepval = PyNumber_Invert(v); + Py_DECREF(v); + if (unlikely(!stepval)) + return (uint64_t) -1; + } else { + stepval = v; + } + v = NULL; + val = (uint64_t) 0; + mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; + shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; + for (bits = 0; bits < (int) sizeof(uint64_t) * 8 - chunk_size; bits += chunk_size) { + PyObject *tmp, *digit; + long idigit; + digit = PyNumber_And(stepval, mask); + if (unlikely(!digit)) goto done; + idigit = PyLong_AsLong(digit); + Py_DECREF(digit); + if (unlikely(idigit < 0)) goto done; + val |= ((uint64_t) idigit) << bits; + tmp = PyNumber_Rshift(stepval, shift); + if (unlikely(!tmp)) goto done; + Py_DECREF(stepval); stepval = tmp; + } + Py_DECREF(shift); shift = NULL; + Py_DECREF(mask); mask = NULL; + { + long idigit = PyLong_AsLong(stepval); + if (unlikely(idigit < 0)) goto done; + remaining_bits = ((int) sizeof(uint64_t) * 8) - bits - (is_unsigned ? 0 : 1); + if (unlikely(idigit >= (1L << remaining_bits))) + goto raise_overflow; + val |= ((uint64_t) idigit) << bits; + } + if (!is_unsigned) { + if (unlikely(val & (((uint64_t) 1) << (sizeof(uint64_t) * 8 - 1)))) + goto raise_overflow; + if (is_negative) + val = ~val; + } + ret = 0; + done: + Py_XDECREF(shift); + Py_XDECREF(mask); + Py_XDECREF(stepval); #endif + if (unlikely(ret)) + return (uint64_t) -1; + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to uint64_t"); + return (uint64_t) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to uint64_t"); + return (uint64_t) -1; +} /* CIntFromPy */ - static CYTHON_INLINE unsigned char __Pyx_PyInt_As_unsigned_char(PyObject *x) { + static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const unsigned char neg_one = (unsigned char) -1, const_zero = (unsigned char) 0; + const unsigned short neg_one = (unsigned short) -1, const_zero = (unsigned short) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if ((sizeof(unsigned char) < sizeof(long))) { - __PYX_VERIFY_RETURN_INT(unsigned char, long, PyInt_AS_LONG(x)) + if ((sizeof(unsigned short) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(unsigned short, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { goto raise_neg_overflow; } - return (unsigned char) val; + return (unsigned short) val; } } #endif if (unlikely(!PyLong_Check(x))) { - unsigned char val; + unsigned short val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (unsigned char) -1; - val = __Pyx_PyInt_As_unsigned_char(tmp); + if (!tmp) return (unsigned short) -1; + val = __Pyx_PyInt_As_unsigned_short(tmp); Py_DECREF(tmp); return val; } @@ -48405,35 +54682,35 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje if (unlikely(__Pyx_PyLong_IsNeg(x))) { goto raise_neg_overflow; } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + __PYX_VERIFY_RETURN_INT(unsigned short, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if ((8 * sizeof(unsigned char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) >= 2 * PyLong_SHIFT)) { - return (unsigned char) (((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned short) >= 2 * PyLong_SHIFT)) { + return (unsigned short) (((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); } } break; case 3: - if ((8 * sizeof(unsigned char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) >= 3 * PyLong_SHIFT)) { - return (unsigned char) (((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned short) >= 3 * PyLong_SHIFT)) { + return (unsigned short) (((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); } } break; case 4: - if ((8 * sizeof(unsigned char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) >= 4 * PyLong_SHIFT)) { - return (unsigned char) (((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0])); + __PYX_VERIFY_RETURN_INT(unsigned short, 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 short) >= 4 * PyLong_SHIFT)) { + return (unsigned short) (((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); } } break; @@ -48448,93 +54725,93 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) - return (unsigned char) -1; + return (unsigned short) -1; if (unlikely(result == 1)) goto raise_neg_overflow; } #endif - if ((sizeof(unsigned char) <= sizeof(unsigned long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned long, PyLong_AsUnsignedLong(x)) + if ((sizeof(unsigned short) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned short, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } else if ((sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned short, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + __PYX_VERIFY_RETURN_INT(unsigned short, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if ((8 * sizeof(unsigned char) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) - 1 > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned char) (((unsigned char)-1)*(((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned short) (((unsigned short)-1)*(((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); } } break; case 2: - if ((8 * sizeof(unsigned char) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned char) ((((((unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned short) ((((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); } } break; case -3: - if ((8 * sizeof(unsigned char) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned char) (((unsigned char)-1)*(((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned short) (((unsigned short)-1)*(((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); } } break; case 3: - if ((8 * sizeof(unsigned char) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned char) ((((((((unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned short) ((((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); } } break; case -4: - if ((8 * sizeof(unsigned char) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned char) (((unsigned char)-1)*(((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned short, 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 short) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned short) (((unsigned short)-1)*(((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); } } break; case 4: - if ((8 * sizeof(unsigned char) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned short) > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned char, 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 char) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned char) ((((((((((unsigned char)digits[3]) << PyLong_SHIFT) | (unsigned char)digits[2]) << PyLong_SHIFT) | (unsigned char)digits[1]) << PyLong_SHIFT) | (unsigned char)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned short, 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 short) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned short) ((((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); } } break; } } #endif - if ((sizeof(unsigned char) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned char, long, PyLong_AsLong(x)) + if ((sizeof(unsigned short) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned short, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned char) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned char, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if ((sizeof(unsigned short) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned short, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { - unsigned char val; + unsigned short val; int ret = -1; #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API Py_ssize_t bytes_copied = PyLong_AsNativeBytes( @@ -48560,14 +54837,14 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje v = __Pyx_NewRef(x); } else { v = PyNumber_Long(x); - if (unlikely(!v)) return (unsigned char) -1; + if (unlikely(!v)) return (unsigned short) -1; assert(PyLong_CheckExact(v)); } { int result = PyObject_RichCompareBool(v, Py_False, Py_LT); if (unlikely(result < 0)) { Py_DECREF(v); - return (unsigned char) -1; + return (unsigned short) -1; } is_negative = result == 1; } @@ -48578,15 +54855,15 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje stepval = PyNumber_Invert(v); Py_DECREF(v); if (unlikely(!stepval)) - return (unsigned char) -1; + return (unsigned short) -1; } else { stepval = v; } v = NULL; - val = (unsigned char) 0; + val = (unsigned short) 0; mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(unsigned char) * 8 - chunk_size; bits += chunk_size) { + for (bits = 0; bits < (int) sizeof(unsigned short) * 8 - chunk_size; bits += chunk_size) { PyObject *tmp, *digit; long idigit; digit = PyNumber_And(stepval, mask); @@ -48594,7 +54871,7 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje idigit = PyLong_AsLong(digit); Py_DECREF(digit); if (unlikely(idigit < 0)) goto done; - val |= ((unsigned char) idigit) << bits; + val |= ((unsigned short) idigit) << bits; tmp = PyNumber_Rshift(stepval, shift); if (unlikely(!tmp)) goto done; Py_DECREF(stepval); stepval = tmp; @@ -48604,13 +54881,13 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje { long idigit = PyLong_AsLong(stepval); if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(unsigned char) * 8) - bits - (is_unsigned ? 0 : 1); + remaining_bits = ((int) sizeof(unsigned short) * 8) - bits - (is_unsigned ? 0 : 1); if (unlikely(idigit >= (1L << remaining_bits))) goto raise_overflow; - val |= ((unsigned char) idigit) << bits; + val |= ((unsigned short) idigit) << bits; } if (!is_unsigned) { - if (unlikely(val & (((unsigned char) 1) << (sizeof(unsigned char) * 8 - 1)))) + if (unlikely(val & (((unsigned short) 1) << (sizeof(unsigned short) * 8 - 1)))) goto raise_overflow; if (is_negative) val = ~val; @@ -48622,250 +54899,48 @@ static CYTHON_INLINE int __pyx_memview_set_nn_uint16_t(const char *itemp, PyObje Py_XDECREF(stepval); #endif if (unlikely(ret)) - return (unsigned char) -1; + return (unsigned short) -1; return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, - "value too large to convert to unsigned char"); - return (unsigned char) -1; + "value too large to convert to unsigned short"); + return (unsigned short) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned char"); - return (unsigned char) -1; -} - -/* MemviewSliceCopyTemplate */ - static __Pyx_memviewslice -__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs, - const char *mode, int ndim, - size_t sizeof_dtype, int contig_flag, - int dtype_is_object) -{ - __Pyx_RefNannyDeclarations - int i; - __Pyx_memviewslice new_mvs = { 0, 0, { 0 }, { 0 }, { 0 } }; - struct __pyx_memoryview_obj *from_memview = from_mvs->memview; - Py_buffer *buf = &from_memview->view; - PyObject *shape_tuple = NULL; - PyObject *temp_int = NULL; - struct __pyx_array_obj *array_obj = NULL; - struct __pyx_memoryview_obj *memview_obj = NULL; - __Pyx_RefNannySetupContext("__pyx_memoryview_copy_new_contig", 0); - for (i = 0; i < ndim; i++) { - if (unlikely(from_mvs->suboffsets[i] >= 0)) { - PyErr_Format(PyExc_ValueError, "Cannot copy memoryview slice with " - "indirect dimensions (axis %d)", i); - goto fail; - } - } - shape_tuple = PyTuple_New(ndim); - if (unlikely(!shape_tuple)) { - goto fail; - } - __Pyx_GOTREF(shape_tuple); - for(i = 0; i < ndim; i++) { - temp_int = PyInt_FromSsize_t(from_mvs->shape[i]); - if(unlikely(!temp_int)) { - goto fail; - } else { - PyTuple_SET_ITEM(shape_tuple, i, temp_int); - temp_int = NULL; - } - } - array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, (char *) mode, NULL); - if (unlikely(!array_obj)) { - goto fail; - } - __Pyx_GOTREF(array_obj); - memview_obj = (struct __pyx_memoryview_obj *) __pyx_memoryview_new( - (PyObject *) array_obj, contig_flag, - dtype_is_object, - from_mvs->memview->typeinfo); - if (unlikely(!memview_obj)) - goto fail; - if (unlikely(__Pyx_init_memviewslice(memview_obj, ndim, &new_mvs, 1) < 0)) - goto fail; - if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim, - dtype_is_object) < 0)) - goto fail; - goto no_fail; -fail: - __Pyx_XDECREF(new_mvs.memview); - new_mvs.memview = NULL; - new_mvs.data = NULL; -no_fail: - __Pyx_XDECREF(shape_tuple); - __Pyx_XDECREF(temp_int); - __Pyx_XDECREF(array_obj); - __Pyx_RefNannyFinishContext(); - return new_mvs; -} - -/* MemviewSliceInit */ - static int -__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview, - int ndim, - __Pyx_memviewslice *memviewslice, - int memview_is_new_reference) -{ - __Pyx_RefNannyDeclarations - int i, retval=-1; - Py_buffer *buf = &memview->view; - __Pyx_RefNannySetupContext("init_memviewslice", 0); - if (unlikely(memviewslice->memview || memviewslice->data)) { - PyErr_SetString(PyExc_ValueError, - "memviewslice is already initialized!"); - goto fail; - } - if (buf->strides) { - for (i = 0; i < ndim; i++) { - memviewslice->strides[i] = buf->strides[i]; - } - } else { - Py_ssize_t stride = buf->itemsize; - for (i = ndim - 1; i >= 0; i--) { - memviewslice->strides[i] = stride; - stride *= buf->shape[i]; - } - } - for (i = 0; i < ndim; i++) { - memviewslice->shape[i] = buf->shape[i]; - if (buf->suboffsets) { - memviewslice->suboffsets[i] = buf->suboffsets[i]; - } else { - memviewslice->suboffsets[i] = -1; - } - } - memviewslice->memview = memview; - memviewslice->data = (char *)buf->buf; - if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) { - Py_INCREF(memview); - } - retval = 0; - goto no_fail; -fail: - memviewslice->memview = 0; - memviewslice->data = 0; - retval = -1; -no_fail: - __Pyx_RefNannyFinishContext(); - return retval; -} -#ifndef Py_NO_RETURN -#define Py_NO_RETURN -#endif -static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN { - va_list vargs; - char msg[200]; -#if PY_VERSION_HEX >= 0x030A0000 || defined(HAVE_STDARG_PROTOTYPES) - va_start(vargs, fmt); -#else - va_start(vargs); -#endif - vsnprintf(msg, 200, fmt, vargs); - va_end(vargs); - Py_FatalError(msg); -} -static CYTHON_INLINE int -__pyx_add_acquisition_count_locked(__pyx_atomic_int_type *acquisition_count, - PyThread_type_lock lock) -{ - int result; - PyThread_acquire_lock(lock, 1); - result = (*acquisition_count)++; - PyThread_release_lock(lock); - return result; -} -static CYTHON_INLINE int -__pyx_sub_acquisition_count_locked(__pyx_atomic_int_type *acquisition_count, - PyThread_type_lock lock) -{ - int result; - PyThread_acquire_lock(lock, 1); - result = (*acquisition_count)--; - PyThread_release_lock(lock); - return result; -} -static CYTHON_INLINE void -__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno) -{ - __pyx_nonatomic_int_type old_acquisition_count; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (unlikely(!memview || (PyObject *) memview == Py_None)) { - return; - } - old_acquisition_count = __pyx_add_acquisition_count(memview); - if (unlikely(old_acquisition_count <= 0)) { - if (likely(old_acquisition_count == 0)) { - if (have_gil) { - Py_INCREF((PyObject *) memview); - } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_INCREF((PyObject *) memview); - PyGILState_Release(_gilstate); - } - } else { - __pyx_fatalerror("Acquisition count is %d (line %d)", - old_acquisition_count+1, lineno); - } - } -} -static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, - int have_gil, int lineno) { - __pyx_nonatomic_int_type old_acquisition_count; - struct __pyx_memoryview_obj *memview = memslice->memview; - if (unlikely(!memview || (PyObject *) memview == Py_None)) { - memslice->memview = NULL; - return; - } - old_acquisition_count = __pyx_sub_acquisition_count(memview); - memslice->data = NULL; - if (likely(old_acquisition_count > 1)) { - memslice->memview = NULL; - } else if (likely(old_acquisition_count == 1)) { - if (have_gil) { - Py_CLEAR(memslice->memview); - } else { - PyGILState_STATE _gilstate = PyGILState_Ensure(); - Py_CLEAR(memslice->memview); - PyGILState_Release(_gilstate); - } - } else { - __pyx_fatalerror("Acquisition count is %d (line %d)", - old_acquisition_count-1, lineno); - } + "can't convert negative value to unsigned short"); + return (unsigned short) -1; } /* CIntFromPy */ - static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_As_unsigned_PY_LONG_LONG(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const int neg_one = (int) -1, const_zero = (int) 0; + const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG) -1, const_zero = (unsigned PY_LONG_LONG) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif 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)) + if ((sizeof(unsigned PY_LONG_LONG) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, 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; + return (unsigned PY_LONG_LONG) val; } } #endif if (unlikely(!PyLong_Check(x))) { - int val; + unsigned PY_LONG_LONG val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); + if (!tmp) return (unsigned PY_LONG_LONG) -1; + val = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(tmp); Py_DECREF(tmp); return val; } @@ -48874,35 +54949,35 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, if (unlikely(__Pyx_PyLong_IsNeg(x))) { goto raise_neg_overflow; } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) > 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])); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned PY_LONG_LONG) >= 2 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); } } break; case 3: - if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) > 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])); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned PY_LONG_LONG) >= 3 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); } } break; case 4: - if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) > 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])); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_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(unsigned PY_LONG_LONG) >= 4 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); } } break; @@ -48917,93 +54992,93 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) - return (int) -1; + return (unsigned PY_LONG_LONG) -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)) + if ((sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned PY_LONG_LONG, 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)) + } else if ((sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned PY_LONG_LONG, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) - 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]))); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) (((unsigned PY_LONG_LONG)-1)*(((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); } } break; case 2: - if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) > 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]))); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) ((((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); } } break; case -3: - if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) - 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]))); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) (((unsigned PY_LONG_LONG)-1)*(((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); } } break; case 3: - if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) > 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]))); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) ((((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); } } break; case -4: - if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) - 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]))); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_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(unsigned PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) (((unsigned PY_LONG_LONG)-1)*(((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); } } break; case 4: - if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned PY_LONG_LONG) > 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]))); + __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_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(unsigned PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned PY_LONG_LONG) ((((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); } } break; } } #endif - if ((sizeof(int) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) + if ((sizeof(unsigned PY_LONG_LONG) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned PY_LONG_LONG, 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)) + } else if ((sizeof(unsigned PY_LONG_LONG) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned PY_LONG_LONG, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { - int val; + unsigned PY_LONG_LONG val; int ret = -1; #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API Py_ssize_t bytes_copied = PyLong_AsNativeBytes( @@ -49029,14 +55104,14 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, v = __Pyx_NewRef(x); } else { v = PyNumber_Long(x); - if (unlikely(!v)) return (int) -1; + if (unlikely(!v)) return (unsigned PY_LONG_LONG) -1; assert(PyLong_CheckExact(v)); } { int result = PyObject_RichCompareBool(v, Py_False, Py_LT); if (unlikely(result < 0)) { Py_DECREF(v); - return (int) -1; + return (unsigned PY_LONG_LONG) -1; } is_negative = result == 1; } @@ -49047,15 +55122,15 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, stepval = PyNumber_Invert(v); Py_DECREF(v); if (unlikely(!stepval)) - return (int) -1; + return (unsigned PY_LONG_LONG) -1; } else { stepval = v; } v = NULL; - val = (int) 0; + val = (unsigned PY_LONG_LONG) 0; mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) { + for (bits = 0; bits < (int) sizeof(unsigned PY_LONG_LONG) * 8 - chunk_size; bits += chunk_size) { PyObject *tmp, *digit; long idigit; digit = PyNumber_And(stepval, mask); @@ -49063,7 +55138,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, idigit = PyLong_AsLong(digit); Py_DECREF(digit); if (unlikely(idigit < 0)) goto done; - val |= ((int) idigit) << bits; + val |= ((unsigned PY_LONG_LONG) idigit) << bits; tmp = PyNumber_Rshift(stepval, shift); if (unlikely(!tmp)) goto done; Py_DECREF(stepval); stepval = tmp; @@ -49073,13 +55148,13 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { long idigit = PyLong_AsLong(stepval); if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1); + remaining_bits = ((int) sizeof(unsigned PY_LONG_LONG) * 8) - bits - (is_unsigned ? 0 : 1); if (unlikely(idigit >= (1L << remaining_bits))) goto raise_overflow; - val |= ((int) idigit) << bits; + val |= ((unsigned PY_LONG_LONG) idigit) << bits; } if (!is_unsigned) { - if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1)))) + if (unlikely(val & (((unsigned PY_LONG_LONG) 1) << (sizeof(unsigned PY_LONG_LONG) * 8 - 1)))) goto raise_overflow; if (is_negative) val = ~val; @@ -49091,48 +55166,48 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, Py_XDECREF(stepval); #endif if (unlikely(ret)) - return (int) -1; + return (unsigned PY_LONG_LONG) -1; return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; + "value too large to convert to unsigned PY_LONG_LONG"); + return (unsigned PY_LONG_LONG) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; + "can't convert negative value to unsigned PY_LONG_LONG"); + return (unsigned PY_LONG_LONG) -1; } /* CIntFromPy */ - static CYTHON_INLINE unsigned short __Pyx_PyInt_As_unsigned_short(PyObject *x) { + static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const unsigned short neg_one = (unsigned short) -1, const_zero = (unsigned short) 0; + const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if ((sizeof(unsigned short) < sizeof(long))) { - __PYX_VERIFY_RETURN_INT(unsigned short, long, PyInt_AS_LONG(x)) + if ((sizeof(unsigned long) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(unsigned long, long, PyInt_AS_LONG(x)) } else { long val = PyInt_AS_LONG(x); if (is_unsigned && unlikely(val < 0)) { goto raise_neg_overflow; } - return (unsigned short) val; + return (unsigned long) val; } } #endif if (unlikely(!PyLong_Check(x))) { - unsigned short val; + unsigned long val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (unsigned short) -1; - val = __Pyx_PyInt_As_unsigned_short(tmp); + if (!tmp) return (unsigned long) -1; + val = __Pyx_PyInt_As_unsigned_long(tmp); Py_DECREF(tmp); return val; } @@ -49141,35 +55216,35 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, if (unlikely(__Pyx_PyLong_IsNeg(x))) { goto raise_neg_overflow; } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned short, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + __PYX_VERIFY_RETURN_INT(unsigned long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if ((8 * sizeof(unsigned short) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned short) >= 2 * PyLong_SHIFT)) { - return (unsigned short) (((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) >= 2 * PyLong_SHIFT)) { + return (unsigned long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); } } break; case 3: - if ((8 * sizeof(unsigned short) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned short) >= 3 * PyLong_SHIFT)) { - return (unsigned short) (((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) >= 3 * PyLong_SHIFT)) { + return (unsigned long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); } } break; case 4: - if ((8 * sizeof(unsigned short) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, 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 short) >= 4 * PyLong_SHIFT)) { - return (unsigned short) (((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0])); + __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) >= 4 * PyLong_SHIFT)) { + return (unsigned long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); } } break; @@ -49184,93 +55259,93 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) - return (unsigned short) -1; + return (unsigned long) -1; if (unlikely(result == 1)) goto raise_neg_overflow; } #endif - if ((sizeof(unsigned short) <= sizeof(unsigned long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned short, unsigned long, PyLong_AsUnsignedLong(x)) + if ((sizeof(unsigned long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned short, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } else if ((sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned short, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + __PYX_VERIFY_RETURN_INT(unsigned long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if ((8 * sizeof(unsigned short) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) - 1 > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned short) (((unsigned short)-1)*(((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned long) (((unsigned long)-1)*(((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); } } break; case 2: - if ((8 * sizeof(unsigned short) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned short) ((((((unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { + return (unsigned long) ((((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); } } break; case -3: - if ((8 * sizeof(unsigned short) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned short) (((unsigned short)-1)*(((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned long) (((unsigned long)-1)*(((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); } } break; case 3: - if ((8 * sizeof(unsigned short) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned short) ((((((((unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { + return (unsigned long) ((((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); } } break; case -4: - if ((8 * sizeof(unsigned short) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, 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 short) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned short) (((unsigned short)-1)*(((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned long) (((unsigned long)-1)*(((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); } } break; case 4: - if ((8 * sizeof(unsigned short) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned short, 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 short) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned short) ((((((((((unsigned short)digits[3]) << PyLong_SHIFT) | (unsigned short)digits[2]) << PyLong_SHIFT) | (unsigned short)digits[1]) << PyLong_SHIFT) | (unsigned short)digits[0]))); + __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) - 1 > 4 * PyLong_SHIFT)) { + return (unsigned long) ((((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); } } break; } } #endif - if ((sizeof(unsigned short) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned short, long, PyLong_AsLong(x)) + if ((sizeof(unsigned long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned short) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned short, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if ((sizeof(unsigned long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { - unsigned short val; + unsigned long val; int ret = -1; #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API Py_ssize_t bytes_copied = PyLong_AsNativeBytes( @@ -49296,14 +55371,14 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, v = __Pyx_NewRef(x); } else { v = PyNumber_Long(x); - if (unlikely(!v)) return (unsigned short) -1; + if (unlikely(!v)) return (unsigned long) -1; assert(PyLong_CheckExact(v)); } { int result = PyObject_RichCompareBool(v, Py_False, Py_LT); if (unlikely(result < 0)) { Py_DECREF(v); - return (unsigned short) -1; + return (unsigned long) -1; } is_negative = result == 1; } @@ -49314,15 +55389,15 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, stepval = PyNumber_Invert(v); Py_DECREF(v); if (unlikely(!stepval)) - return (unsigned short) -1; + return (unsigned long) -1; } else { stepval = v; } v = NULL; - val = (unsigned short) 0; + val = (unsigned long) 0; mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(unsigned short) * 8 - chunk_size; bits += chunk_size) { + for (bits = 0; bits < (int) sizeof(unsigned long) * 8 - chunk_size; bits += chunk_size) { PyObject *tmp, *digit; long idigit; digit = PyNumber_And(stepval, mask); @@ -49330,7 +55405,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, idigit = PyLong_AsLong(digit); Py_DECREF(digit); if (unlikely(idigit < 0)) goto done; - val |= ((unsigned short) idigit) << bits; + val |= ((unsigned long) idigit) << bits; tmp = PyNumber_Rshift(stepval, shift); if (unlikely(!tmp)) goto done; Py_DECREF(stepval); stepval = tmp; @@ -49340,13 +55415,13 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { long idigit = PyLong_AsLong(stepval); if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(unsigned short) * 8) - bits - (is_unsigned ? 0 : 1); + remaining_bits = ((int) sizeof(unsigned long) * 8) - bits - (is_unsigned ? 0 : 1); if (unlikely(idigit >= (1L << remaining_bits))) goto raise_overflow; - val |= ((unsigned short) idigit) << bits; + val |= ((unsigned long) idigit) << bits; } if (!is_unsigned) { - if (unlikely(val & (((unsigned short) 1) << (sizeof(unsigned short) * 8 - 1)))) + if (unlikely(val & (((unsigned long) 1) << (sizeof(unsigned long) * 8 - 1)))) goto raise_overflow; if (is_negative) val = ~val; @@ -49358,48 +55433,48 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, Py_XDECREF(stepval); #endif if (unlikely(ret)) - return (unsigned short) -1; + return (unsigned long) -1; return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, - "value too large to convert to unsigned short"); - return (unsigned short) -1; + "value too large to convert to unsigned long"); + return (unsigned long) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned short"); - return (unsigned short) -1; + "can't convert negative value to unsigned long"); + return (unsigned long) -1; } /* CIntFromPy */ - static CYTHON_INLINE unsigned PY_LONG_LONG __Pyx_PyInt_As_unsigned_PY_LONG_LONG(PyObject *x) { + static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG) -1, const_zero = (unsigned PY_LONG_LONG) 0; + const long neg_one = (long) -1, const_zero = (long) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; #if PY_MAJOR_VERSION < 3 if (likely(PyInt_Check(x))) { - if ((sizeof(unsigned PY_LONG_LONG) < sizeof(long))) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, long, PyInt_AS_LONG(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 (unsigned PY_LONG_LONG) val; + return (long) val; } } #endif if (unlikely(!PyLong_Check(x))) { - unsigned PY_LONG_LONG val; + long val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (unsigned PY_LONG_LONG) -1; - val = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(tmp); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); Py_DECREF(tmp); return val; } @@ -49408,35 +55483,35 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, if (unlikely(__Pyx_PyLong_IsNeg(x))) { goto raise_neg_overflow; } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if ((8 * sizeof(unsigned PY_LONG_LONG) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned PY_LONG_LONG) >= 2 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + __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(unsigned PY_LONG_LONG) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned PY_LONG_LONG) >= 3 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + __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(unsigned PY_LONG_LONG) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_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(unsigned PY_LONG_LONG) >= 4 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0])); + __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; @@ -49451,93 +55526,93 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) - return (unsigned PY_LONG_LONG) -1; + return (long) -1; if (unlikely(result == 1)) goto raise_neg_overflow; } #endif - if ((sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned PY_LONG_LONG, unsigned long, PyLong_AsUnsignedLong(x)) + if ((sizeof(long) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned PY_LONG_LONG, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } 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 if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) (((unsigned PY_LONG_LONG)-1)*(((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); + __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(unsigned PY_LONG_LONG) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) ((((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); + __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(unsigned PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) (((unsigned PY_LONG_LONG)-1)*(((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); + __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(unsigned PY_LONG_LONG) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_LONG, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) ((((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); + __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(unsigned PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_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(unsigned PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) (((unsigned PY_LONG_LONG)-1)*(((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); + __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(unsigned PY_LONG_LONG) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned PY_LONG_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(unsigned PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned PY_LONG_LONG) ((((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]))); + __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(unsigned PY_LONG_LONG) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned PY_LONG_LONG, long, PyLong_AsLong(x)) + if ((sizeof(long) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) #ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned PY_LONG_LONG) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned PY_LONG_LONG, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { - unsigned PY_LONG_LONG val; + long val; int ret = -1; #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API Py_ssize_t bytes_copied = PyLong_AsNativeBytes( @@ -49563,14 +55638,14 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, v = __Pyx_NewRef(x); } else { v = PyNumber_Long(x); - if (unlikely(!v)) return (unsigned PY_LONG_LONG) -1; + if (unlikely(!v)) return (long) -1; assert(PyLong_CheckExact(v)); } { int result = PyObject_RichCompareBool(v, Py_False, Py_LT); if (unlikely(result < 0)) { Py_DECREF(v); - return (unsigned PY_LONG_LONG) -1; + return (long) -1; } is_negative = result == 1; } @@ -49581,15 +55656,15 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, stepval = PyNumber_Invert(v); Py_DECREF(v); if (unlikely(!stepval)) - return (unsigned PY_LONG_LONG) -1; + return (long) -1; } else { stepval = v; } v = NULL; - val = (unsigned PY_LONG_LONG) 0; + val = (long) 0; mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(unsigned PY_LONG_LONG) * 8 - chunk_size; bits += chunk_size) { + for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { PyObject *tmp, *digit; long idigit; digit = PyNumber_And(stepval, mask); @@ -49597,7 +55672,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, idigit = PyLong_AsLong(digit); Py_DECREF(digit); if (unlikely(idigit < 0)) goto done; - val |= ((unsigned PY_LONG_LONG) idigit) << bits; + val |= ((long) idigit) << bits; tmp = PyNumber_Rshift(stepval, shift); if (unlikely(!tmp)) goto done; Py_DECREF(stepval); stepval = tmp; @@ -49607,13 +55682,13 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { long idigit = PyLong_AsLong(stepval); if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(unsigned PY_LONG_LONG) * 8) - bits - (is_unsigned ? 0 : 1); + remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); if (unlikely(idigit >= (1L << remaining_bits))) goto raise_overflow; - val |= ((unsigned PY_LONG_LONG) idigit) << bits; + val |= ((long) idigit) << bits; } if (!is_unsigned) { - if (unlikely(val & (((unsigned PY_LONG_LONG) 1) << (sizeof(unsigned PY_LONG_LONG) * 8 - 1)))) + if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) goto raise_overflow; if (is_negative) val = ~val; @@ -49625,315 +55700,403 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, Py_XDECREF(stepval); #endif if (unlikely(ret)) - return (unsigned PY_LONG_LONG) -1; + return (long) -1; return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, - "value too large to convert to unsigned PY_LONG_LONG"); - return (unsigned PY_LONG_LONG) -1; + "value too large to convert to long"); + return (long) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned PY_LONG_LONG"); - return (unsigned PY_LONG_LONG) -1; + "can't convert negative value to long"); + return (long) -1; +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint64_t(uint64_t value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const uint64_t neg_one = (uint64_t) -1, const_zero = (uint64_t) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(uint64_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(uint64_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint64_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(uint64_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint64_t) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(uint64_t), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint64_t)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint8_t(uint8_t value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const uint8_t neg_one = (uint8_t) -1, const_zero = (uint8_t) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(uint8_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(uint8_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint8_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(uint8_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint8_t) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(uint8_t), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint8_t)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int64_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int64_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int64_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); + } else { + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); + } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(int64_t), + little, !is_unsigned); +#else + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int64_t)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; + } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; +#endif + } } -/* CIntFromPy */ - static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) { +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint32_t(uint32_t value) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0; + const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if ((sizeof(unsigned long) < sizeof(long))) { - __PYX_VERIFY_RETURN_INT(unsigned long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (unsigned long) val; + if (is_unsigned) { + if (sizeof(uint32_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(uint32_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif } - } + } else { + if (sizeof(uint32_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(uint32_t) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); #endif - if (unlikely(!PyLong_Check(x))) { - unsigned long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (unsigned long) -1; - val = __Pyx_PyInt_As_unsigned_long(tmp); - Py_DECREF(tmp); - return val; + } } - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - if (unlikely(__Pyx_PyLong_IsNeg(x))) { - goto raise_neg_overflow; - } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + { + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_DigitCount(x)) { - case 2: - if ((8 * sizeof(unsigned long) > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned long) >= 2 * PyLong_SHIFT)) { - return (unsigned long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - } - } - break; - case 3: - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned long) >= 3 * PyLong_SHIFT)) { - return (unsigned long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - } - } - break; - case 4: - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) >= 4 * PyLong_SHIFT)) { - return (unsigned long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])); - } - } - break; - } - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7 - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); } +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(uint32_t), + little, !is_unsigned); #else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (unsigned long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint32_t)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; + if (!is_unsigned) { + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; } + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; #endif - if ((sizeof(unsigned long) <= sizeof(unsigned long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned long, PyLong_AsUnsignedLong(x)) + } +} + +/* CIntToPy */ + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) { +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wconversion" +#endif + const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0; +#ifdef __Pyx_HAS_GCC_DIAGNOSTIC +#pragma GCC diagnostic pop +#endif + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(uint16_t) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(uint16_t) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); #ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) + } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif } } else { -#if CYTHON_USE_PYLONG_INTERNALS - if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(unsigned long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) - } else { - const digit* digits = __Pyx_PyLong_Digits(x); - assert(__Pyx_PyLong_DigitCount(x) > 1); - switch (__Pyx_PyLong_SignedDigitCount(x)) { - case -2: - if ((8 * sizeof(unsigned long) - 1 > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned long) (((unsigned long)-1)*(((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); - } - } - break; - case 2: - if ((8 * sizeof(unsigned long) > 1 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { - return (unsigned long) ((((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); - } - } - break; - case -3: - if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned long) (((unsigned long)-1)*(((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); - } - } - break; - case 3: - if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { - return (unsigned long) ((((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); - } - } - break; - case -4: - if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned long) (((unsigned long)-1)*(((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); - } - } - break; - case 4: - if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) { - if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) { - __PYX_VERIFY_RETURN_INT(unsigned 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(unsigned long) - 1 > 4 * PyLong_SHIFT)) { - return (unsigned long) ((((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))); - } - } - break; - } - } -#endif - if ((sizeof(unsigned long) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned long, long, PyLong_AsLong(x)) + if (sizeof(uint16_t) <= sizeof(long)) { + return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG - } else if ((sizeof(unsigned long) <= sizeof(PY_LONG_LONG))) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned long, PY_LONG_LONG, PyLong_AsLongLong(x)) + } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } } { - unsigned long val; - int ret = -1; -#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API - Py_ssize_t bytes_copied = PyLong_AsNativeBytes( - x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0)); - if (unlikely(bytes_copied == -1)) { - } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) { - goto raise_overflow; + unsigned char *bytes = (unsigned char *)&value; +#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 + if (is_unsigned) { + return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); } else { - ret = 0; + return PyLong_FromNativeBytes(bytes, sizeof(value), -1); } -#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray) - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - ret = _PyLong_AsByteArray((PyLongObject *)x, - bytes, sizeof(val), - is_little, !is_unsigned); +#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 + int one = 1; int little = (int)*(unsigned char *)&one; + return _PyLong_FromByteArray(bytes, sizeof(uint16_t), + little, !is_unsigned); #else - PyObject *v; - PyObject *stepval = NULL, *mask = NULL, *shift = NULL; - int bits, remaining_bits, is_negative = 0; - int chunk_size = (sizeof(long) < 8) ? 30 : 62; - if (likely(PyLong_CheckExact(x))) { - v = __Pyx_NewRef(x); - } else { - v = PyNumber_Long(x); - if (unlikely(!v)) return (unsigned long) -1; - assert(PyLong_CheckExact(v)); - } - { - int result = PyObject_RichCompareBool(v, Py_False, Py_LT); - if (unlikely(result < 0)) { - Py_DECREF(v); - return (unsigned long) -1; - } - is_negative = result == 1; - } - if (is_unsigned && unlikely(is_negative)) { - Py_DECREF(v); - goto raise_neg_overflow; - } else if (is_negative) { - stepval = PyNumber_Invert(v); - Py_DECREF(v); - if (unlikely(!stepval)) - return (unsigned long) -1; - } else { - stepval = v; - } - v = NULL; - val = (unsigned long) 0; - mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; - shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(unsigned long) * 8 - chunk_size; bits += chunk_size) { - PyObject *tmp, *digit; - long idigit; - digit = PyNumber_And(stepval, mask); - if (unlikely(!digit)) goto done; - idigit = PyLong_AsLong(digit); - Py_DECREF(digit); - if (unlikely(idigit < 0)) goto done; - val |= ((unsigned long) idigit) << bits; - tmp = PyNumber_Rshift(stepval, shift); - if (unlikely(!tmp)) goto done; - Py_DECREF(stepval); stepval = tmp; - } - Py_DECREF(shift); shift = NULL; - Py_DECREF(mask); mask = NULL; - { - long idigit = PyLong_AsLong(stepval); - if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(unsigned long) * 8) - bits - (is_unsigned ? 0 : 1); - if (unlikely(idigit >= (1L << remaining_bits))) - goto raise_overflow; - val |= ((unsigned long) idigit) << bits; - } + int one = 1; int little = (int)*(unsigned char *)&one; + PyObject *from_bytes, *result = NULL; + PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; + from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); + if (!from_bytes) return NULL; + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint16_t)); + if (!py_bytes) goto limited_bad; + order_str = PyUnicode_FromString(little ? "little" : "big"); + if (!order_str) goto limited_bad; + arg_tuple = PyTuple_Pack(2, py_bytes, order_str); + if (!arg_tuple) goto limited_bad; if (!is_unsigned) { - if (unlikely(val & (((unsigned long) 1) << (sizeof(unsigned long) * 8 - 1)))) - goto raise_overflow; - if (is_negative) - val = ~val; + kwds = PyDict_New(); + if (!kwds) goto limited_bad; + if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; } - ret = 0; - done: - Py_XDECREF(shift); - Py_XDECREF(mask); - Py_XDECREF(stepval); + result = PyObject_Call(from_bytes, arg_tuple, kwds); + limited_bad: + Py_XDECREF(kwds); + Py_XDECREF(arg_tuple); + Py_XDECREF(order_str); + Py_XDECREF(py_bytes); + Py_XDECREF(from_bytes); + return result; #endif - if (unlikely(ret)) - return (unsigned long) -1; - return val; } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to unsigned long"); - return (unsigned long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned long"); - return (unsigned long) -1; } /* CIntFromPy */ - static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + static CYTHON_INLINE uint32_t __Pyx_PyInt_As_uint32_t(PyObject *x) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const long neg_one = (long) -1, const_zero = (long) 0; + const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif 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)) + if ((sizeof(uint32_t) < sizeof(long))) { + __PYX_VERIFY_RETURN_INT(uint32_t, 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; + return (uint32_t) val; } } #endif if (unlikely(!PyLong_Check(x))) { - long val; + uint32_t val; PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); + if (!tmp) return (uint32_t) -1; + val = __Pyx_PyInt_As_uint32_t(tmp); Py_DECREF(tmp); return val; } @@ -49942,35 +56105,35 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, if (unlikely(__Pyx_PyLong_IsNeg(x))) { goto raise_neg_overflow; } else if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) + __PYX_VERIFY_RETURN_INT(uint32_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_DigitCount(x)) { case 2: - if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) > 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])); + __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint32_t) >= 2 * PyLong_SHIFT)) { + return (uint32_t) (((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])); } } break; case 3: - if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) > 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])); + __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint32_t) >= 3 * PyLong_SHIFT)) { + return (uint32_t) (((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])); } } break; case 4: - if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) > 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])); + __PYX_VERIFY_RETURN_INT(uint32_t, 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(uint32_t) >= 4 * PyLong_SHIFT)) { + return (uint32_t) (((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])); } } break; @@ -49985,93 +56148,93 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { int result = PyObject_RichCompareBool(x, Py_False, Py_LT); if (unlikely(result < 0)) - return (long) -1; + return (uint32_t) -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)) + if ((sizeof(uint32_t) <= sizeof(unsigned long))) { + __PYX_VERIFY_RETURN_INT_EXC(uint32_t, 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)) + } else if ((sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(uint32_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) #endif } } else { #if CYTHON_USE_PYLONG_INTERNALS if (__Pyx_PyLong_IsCompact(x)) { - __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) + __PYX_VERIFY_RETURN_INT(uint32_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x)) } else { const digit* digits = __Pyx_PyLong_Digits(x); assert(__Pyx_PyLong_DigitCount(x) > 1); switch (__Pyx_PyLong_SignedDigitCount(x)) { case -2: - if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) - 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]))); + __PYX_VERIFY_RETURN_INT(uint32_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint32_t) - 1 > 2 * PyLong_SHIFT)) { + return (uint32_t) (((uint32_t)-1)*(((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]))); } } break; case 2: - if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) > 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]))); + __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint32_t) - 1 > 2 * PyLong_SHIFT)) { + return (uint32_t) ((((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]))); } } break; case -3: - if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) - 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]))); + __PYX_VERIFY_RETURN_INT(uint32_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint32_t) - 1 > 3 * PyLong_SHIFT)) { + return (uint32_t) (((uint32_t)-1)*(((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]))); } } break; case 3: - if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) > 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]))); + __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if ((8 * sizeof(uint32_t) - 1 > 3 * PyLong_SHIFT)) { + return (uint32_t) ((((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]))); } } break; case -4: - if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) - 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]))); + __PYX_VERIFY_RETURN_INT(uint32_t, 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(uint32_t) - 1 > 4 * PyLong_SHIFT)) { + return (uint32_t) (((uint32_t)-1)*(((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]))); } } break; case 4: - if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) { + if ((8 * sizeof(uint32_t) > 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]))); + __PYX_VERIFY_RETURN_INT(uint32_t, 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(uint32_t) - 1 > 4 * PyLong_SHIFT)) { + return (uint32_t) ((((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]))); } } break; } } #endif - if ((sizeof(long) <= sizeof(long))) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) + if ((sizeof(uint32_t) <= sizeof(long))) { + __PYX_VERIFY_RETURN_INT_EXC(uint32_t, 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)) + } else if ((sizeof(uint32_t) <= sizeof(PY_LONG_LONG))) { + __PYX_VERIFY_RETURN_INT_EXC(uint32_t, PY_LONG_LONG, PyLong_AsLongLong(x)) #endif } } { - long val; + uint32_t val; int ret = -1; #if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API Py_ssize_t bytes_copied = PyLong_AsNativeBytes( @@ -50097,14 +56260,14 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, v = __Pyx_NewRef(x); } else { v = PyNumber_Long(x); - if (unlikely(!v)) return (long) -1; + if (unlikely(!v)) return (uint32_t) -1; assert(PyLong_CheckExact(v)); } { int result = PyObject_RichCompareBool(v, Py_False, Py_LT); if (unlikely(result < 0)) { Py_DECREF(v); - return (long) -1; + return (uint32_t) -1; } is_negative = result == 1; } @@ -50115,15 +56278,15 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, stepval = PyNumber_Invert(v); Py_DECREF(v); if (unlikely(!stepval)) - return (long) -1; + return (uint32_t) -1; } else { stepval = v; } v = NULL; - val = (long) 0; + val = (uint32_t) 0; mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done; shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done; - for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) { + for (bits = 0; bits < (int) sizeof(uint32_t) * 8 - chunk_size; bits += chunk_size) { PyObject *tmp, *digit; long idigit; digit = PyNumber_And(stepval, mask); @@ -50131,7 +56294,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, idigit = PyLong_AsLong(digit); Py_DECREF(digit); if (unlikely(idigit < 0)) goto done; - val |= ((long) idigit) << bits; + val |= ((uint32_t) idigit) << bits; tmp = PyNumber_Rshift(stepval, shift); if (unlikely(!tmp)) goto done; Py_DECREF(stepval); stepval = tmp; @@ -50141,13 +56304,13 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, { long idigit = PyLong_AsLong(stepval); if (unlikely(idigit < 0)) goto done; - remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1); + remaining_bits = ((int) sizeof(uint32_t) * 8) - bits - (is_unsigned ? 0 : 1); if (unlikely(idigit >= (1L << remaining_bits))) goto raise_overflow; - val |= ((long) idigit) << bits; + val |= ((uint32_t) idigit) << bits; } if (!is_unsigned) { - if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1)))) + if (unlikely(val & (((uint32_t) 1) << (sizeof(uint32_t) * 8 - 1)))) goto raise_overflow; if (is_negative) val = ~val; @@ -50159,45 +56322,45 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, Py_XDECREF(stepval); #endif if (unlikely(ret)) - return (long) -1; + return (uint32_t) -1; return val; } raise_overflow: PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; + "value too large to convert to uint32_t"); + return (uint32_t) -1; raise_neg_overflow: PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; + "can't convert negative value to uint32_t"); + return (uint32_t) -1; } /* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value) { + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG) -1, const_zero = (unsigned PY_LONG_LONG) 0; + const long neg_one = (long) -1, const_zero = (long) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; if (is_unsigned) { - if (sizeof(unsigned PY_LONG_LONG) < sizeof(long)) { + if (sizeof(long) < sizeof(long)) { return PyInt_FromLong((long) value); - } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned long)) { + } else if (sizeof(long) <= sizeof(unsigned long)) { return PyLong_FromUnsignedLong((unsigned long) value); #ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG)) { + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif } } else { - if (sizeof(unsigned PY_LONG_LONG) <= sizeof(long)) { + if (sizeof(long) <= sizeof(long)) { return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(PY_LONG_LONG)) { + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } @@ -50212,7 +56375,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, } #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(unsigned PY_LONG_LONG), + return _PyLong_FromByteArray(bytes, sizeof(long), little, !is_unsigned); #else int one = 1; int little = (int)*(unsigned char *)&one; @@ -50220,7 +56383,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned PY_LONG_LONG)); + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); if (!py_bytes) goto limited_bad; order_str = PyUnicode_FromString(little ? "little" : "big"); if (!order_str) goto limited_bad; @@ -50244,31 +56407,31 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, } /* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) { + static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wconversion" #endif - const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0; + const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG) -1, const_zero = (unsigned PY_LONG_LONG) 0; #ifdef __Pyx_HAS_GCC_DIAGNOSTIC #pragma GCC diagnostic pop #endif const int is_unsigned = neg_one > const_zero; if (is_unsigned) { - if (sizeof(uint16_t) < sizeof(long)) { + if (sizeof(unsigned PY_LONG_LONG) < sizeof(long)) { return PyInt_FromLong((long) value); - } else if (sizeof(uint16_t) <= sizeof(unsigned long)) { + } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned long)) { return PyLong_FromUnsignedLong((unsigned long) value); #ifdef HAVE_LONG_LONG - } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) { + } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG)) { return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); #endif } } else { - if (sizeof(uint16_t) <= sizeof(long)) { + if (sizeof(unsigned PY_LONG_LONG) <= sizeof(long)) { return PyInt_FromLong((long) value); #ifdef HAVE_LONG_LONG - } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) { + } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(PY_LONG_LONG)) { return PyLong_FromLongLong((PY_LONG_LONG) value); #endif } @@ -50283,7 +56446,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, } #elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(uint16_t), + return _PyLong_FromByteArray(bytes, sizeof(unsigned PY_LONG_LONG), little, !is_unsigned); #else int one = 1; int little = (int)*(unsigned char *)&one; @@ -50291,7 +56454,7 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint16_t)); + py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned PY_LONG_LONG)); if (!py_bytes) goto limited_bad; order_str = PyUnicode_FromString(little ? "little" : "big"); if (!order_str) goto limited_bad; @@ -50794,77 +56957,6 @@ static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *memslice, } } -/* CIntToPy */ - static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wconversion" -#endif - const long neg_one = (long) -1, const_zero = (long) 0; -#ifdef __Pyx_HAS_GCC_DIAGNOSTIC -#pragma GCC diagnostic pop -#endif - 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 - } - } - { - unsigned char *bytes = (unsigned char *)&value; -#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4 - if (is_unsigned) { - return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1); - } else { - return PyLong_FromNativeBytes(bytes, sizeof(value), -1); - } -#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000 - int one = 1; int little = (int)*(unsigned char *)&one; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); -#else - int one = 1; int little = (int)*(unsigned char *)&one; - PyObject *from_bytes, *result = NULL; - PyObject *py_bytes = NULL, *arg_tuple = NULL, *kwds = NULL, *order_str = NULL; - from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes"); - if (!from_bytes) return NULL; - py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long)); - if (!py_bytes) goto limited_bad; - order_str = PyUnicode_FromString(little ? "little" : "big"); - if (!order_str) goto limited_bad; - arg_tuple = PyTuple_Pack(2, py_bytes, order_str); - if (!arg_tuple) goto limited_bad; - if (!is_unsigned) { - kwds = PyDict_New(); - if (!kwds) goto limited_bad; - if (PyDict_SetItemString(kwds, "signed", __Pyx_NewRef(Py_True))) goto limited_bad; - } - result = PyObject_Call(from_bytes, arg_tuple, kwds); - limited_bad: - Py_XDECREF(kwds); - Py_XDECREF(arg_tuple); - Py_XDECREF(order_str); - Py_XDECREF(py_bytes); - Py_XDECREF(from_bytes); - return result; -#endif - } -} - /* CIntToPy */ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { #ifdef __Pyx_HAS_GCC_DIAGNOSTIC @@ -51213,7 +57305,7 @@ __Pyx_PyType_GetName(PyTypeObject* tp) if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) { PyErr_Clear(); Py_XDECREF(name); - name = __Pyx_NewRef(__pyx_n_s__51); + name = __Pyx_NewRef(__pyx_n_s__53); } return name; } diff --git a/dataRead.pyx b/dataRead.pyx index ba2c2f9..31494fc 100644 --- a/dataRead.pyx +++ b/dataRead.pyx @@ -2,11 +2,12 @@ import numpy as np cimport numpy as np from sys import byteorder -from libc.stdint cimport uint16_t, uint32_t, uint64_t +from libc.stdint cimport int64_t, uint8_t, uint16_t, uint32_t, uint64_t from libc.stdio cimport printf from cpython.mem cimport PyMem_Malloc, PyMem_Free from cpython.bytes cimport PyBytes_AsString from libc.string cimport memcpy +from posix.unistd cimport pread as c_pread cimport cython # ────────────────────────────────────────────────────────────────────────────── @@ -98,6 +99,431 @@ cdef class SymBufReader: return self._fid.fileno() +# ─── MDF4 fast metadata reader (pread + C structs) ──────────────────────────── +# Replaces the Python struct.unpack + fid.seek/read hot path for CN/CC/SI/TX. +# Uses POSIX pread() to eliminate Python file-object dispatch overhead and +# a fast ... bytes scan to avoid lxml for the common case. +# ────────────────────────────────────────────────────────────────────────────── + +_SI_TYPE_MAP = {0: 'OTHER', 1: 'ECU', 2: 'BUS', 3: 'I/O', 4: 'TOOL', 5: 'USER'} +_SI_BUS_MAP = {0: 'NONE', 1: 'OTHER', 2: 'CAN', 3: 'LIN', + 4: 'MOST', 5: 'FLEXRAY', 6: 'K_LINE', 7: 'ETHERNET', 8: 'USB'} + +# C struct layout matching on-disk MDF4 little-endian packed format. +# All structs are packed (no padding) to match the binary layout. + +cdef packed struct _CNFixedHdr: # 88 bytes: 24-byte header + 8 standard links + char id[4] + uint32_t reserved + uint64_t length + uint64_t link_count + uint64_t cn_cn_next + uint64_t cn_composition + uint64_t cn_tx_name + uint64_t cn_si_source + uint64_t cn_cc_conversion + uint64_t cn_data + uint64_t cn_md_unit + uint64_t cn_md_comment + +cdef packed struct _CNData: # 72 bytes data section + uint8_t cn_type + uint8_t cn_sync_type + uint8_t cn_data_type + uint8_t cn_bit_offset + uint32_t cn_byte_offset + uint32_t cn_bit_count + uint32_t cn_flags + uint32_t cn_invalid_bit_pos + uint8_t cn_precision + uint8_t cn_reserved + uint16_t cn_attachment_count + double cn_val_range_min + double cn_val_range_max + double cn_limit_min + double cn_limit_max + double cn_limit_ext_min + double cn_limit_ext_max + +cdef packed struct _CCFixedHdr: # 56 bytes: 24-byte header + 4 standard links + char id[4] + uint32_t reserved + uint64_t length + uint64_t link_count + uint64_t cc_tx_name + uint64_t cc_md_unit + uint64_t cc_md_comment + uint64_t cc_cc_inverse + +cdef packed struct _CCData: # 24 bytes data section + uint8_t cc_type + uint8_t cc_precision + uint16_t cc_flags + uint16_t cc_ref_count + uint16_t cc_val_count + double cc_phy_range_min + double cc_phy_range_max + +cdef packed struct _SIBlock: # 56 bytes total (header + 3 links + data) + char id[4] + uint32_t reserved + uint64_t length + uint64_t link_count + uint64_t si_tx_name + uint64_t si_tx_path + uint64_t si_md_comment + uint8_t si_type + uint8_t si_bus_type + uint8_t si_flags + char si_reserved[5] + +cdef packed struct _TXHdr: # 24 bytes + char id[4] + uint32_t reserved + uint64_t length + uint64_t link_count + + +cdef str _fast_read_tx(int fd, uint64_t pointer): + """Read TX block text via pread. Returns '' if pointer is 0 or read fails.""" + cdef _TXHdr hdr + cdef Py_ssize_t content_len, end, nread + cdef unsigned char* buf + cdef str result + + if pointer == 0: + return '' + with nogil: + nread = c_pread(fd, &hdr, 24, pointer) + if nread < 24 or hdr.length <= 24: + return '' + content_len = (hdr.length - 24) + if content_len <= 0: + return '' + buf = PyMem_Malloc(content_len + 1) + if buf == NULL: + return '' + try: + with nogil: + nread = c_pread(fd, buf, content_len, pointer + 24) + if nread < 1: + return '' + end = nread + while end > 0 and buf[end - 1] == 0: + end -= 1 + buf[end] = 0 + result = (buf[:end]).decode('UTF-8', 'ignore') + finally: + PyMem_Free(buf) + return result + + +cdef str _fast_read_tx_or_md(int fd, uint64_t pointer): + """Read TX or MD block via pread. + + TX blocks: return text directly. + MD blocks: fast ... bytes scan (covers >95% of real MDF4 files). + Returns '' if pointer is 0, read fails, or scan finds no TX element. + """ + cdef _TXHdr hdr + cdef Py_ssize_t content_len, nread, tx_start, tx_end, end + cdef unsigned char* buf + cdef bytes payload + cdef str result + + if pointer == 0: + return '' + with nogil: + nread = c_pread(fd, &hdr, 24, pointer) + if nread < 24 or hdr.length <= 24: + return '' + content_len = (hdr.length - 24) + if content_len <= 0: + return '' + buf = PyMem_Malloc(content_len + 1) + if buf == NULL: + return '' + try: + with nogil: + nread = c_pread(fd, buf, content_len, pointer + 24) + if nread < 1: + return '' + end = nread + while end > 0 and buf[end - 1] == 0: + end -= 1 + # TX block (id[2]=='T', id[3]=='X') + if hdr.id[2] == b'T' and hdr.id[3] == b'X': + buf[end] = 0 + result = (buf[:end]).decode('UTF-8', 'ignore') + return result + # MD block: fast ... scan + payload = bytes(buf[:end]) + tx_start = payload.find(b'') + if tx_start >= 0: + tx_start += 4 + tx_end = payload.find(b'', tx_start) + if tx_end >= 0: + return payload[tx_start:tx_end].decode('UTF-8', 'ignore') + # CDATA or namespaced XML: attempt lxml parse + try: + from lxml import objectify as _obj + xml_tree = _obj.fromstring(payload) + # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. + try: + return str(xml_tree.TX) + except AttributeError: + pass + try: + return str(xml_tree.CNcomment.TX) + except AttributeError: + pass + try: + return str(xml_tree.CNunit.TX) + except AttributeError: + pass + except Exception: + pass + return '' + finally: + PyMem_Free(buf) + + +cdef dict _fast_read_si(int fd, uint64_t pointer): + """Read SI block and return a dict matching the SIBlock format. + + Returns None if pointer is 0 or read fails. + """ + cdef _SIBlock si + cdef Py_ssize_t nread + cdef dict result + + if pointer == 0: + return None + with nogil: + nread = c_pread(fd, &si, 56, pointer) + if nread < 56: + return None + result = { + 'id': b'##SI', + 'length': si.length, + 'link_count': si.link_count, + 'si_tx_name': si.si_tx_name, + 'si_tx_path': si.si_tx_path, + 'si_md_comment': si.si_md_comment, + 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), + 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), + 'si_flags': si.si_flags, + 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, + 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, + } + return result + + +def read_cn_chain_fast(object fid, uint64_t first_pointer, + dict si_cache, int minimal, bint channel_name_list): + """Read the CN linked list starting at first_pointer using pread(). + + Parameters + ---------- + fid : file object (must support fileno()) + first_pointer : uint64_t + File offset of the first CN block in the chain + si_cache : dict + Shared SI block cache keyed by file offset; updated in-place + minimal : int + 0 = load all metadata; non-zero = skip SI and XML comment + channel_name_list : bool + True = read only channel names (skip CC/SI/unit/comment) + + Returns + ------- + list of (cn_key, cn_dict, cc_dict) tuples + cn_key is positive (byte_offset*8 + bit_offset) or negative (DS mode) + cn_dict and cc_dict match the structure produced by read_cn_block() + cc_dict has '_needs_completion'=True for cc_type 3/7-11 + """ + cdef int fd = fid.fileno() + cdef uint64_t pointer = first_pointer + cdef _CNFixedHdr cn_hdr + cdef _CNData cn_dat + cdef _CCFixedHdr cc_hdr + cdef _CCData cc_dat + cdef Py_ssize_t nread, data_offset, cc_data_offset, n_extra, n_bytes + cdef uint64_t cn_key_uint, si_ptr, cc_ptr + cdef int64_t cn_key_neg + cdef object cn_key + cdef list results = [] + cdef dict cn_dict, cc_dict, si_dict + cdef str cn_name, unit_str, desc_str + cdef unsigned char extra_buf[512] # for extra CN links (attachments) + cdef double* dbl_ptr + cdef unsigned char* cc_val_buf + cdef list cc_val_list + cdef uint32_t i + + while pointer != 0: + # ── Read CN fixed header + 8 standard links (88 bytes) ────────────── + with nogil: + nread = c_pread(fd, &cn_hdr, 88, pointer) + if nread < 88: + break + + # ── Read CN data section (72 bytes at variable offset) ─────────────── + data_offset = 24 + (cn_hdr.link_count) * 8 + with nogil: + nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) + if nread < 72: + break + + # ── Compute dict key ───────────────────────────────────────────────── + if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE + cn_key_neg = -pointer + cn_key = cn_key_neg + else: + cn_key_uint = (cn_dat.cn_byte_offset) * 8 + cn_dat.cn_bit_offset + cn_key = cn_key_uint + + # ── Read channel name (TX block) ───────────────────────────────────── + cn_name = _fast_read_tx(fd, cn_hdr.cn_tx_name) if cn_hdr.cn_tx_name else '' + + # ── Build CN dict ───────────────────────────────────────────────────── + cn_dict = { + 'pointer': pointer, + 'id': b'##CN', + 'length': cn_hdr.length, + 'link_count': cn_hdr.link_count, + 'cn_cn_next': cn_hdr.cn_cn_next, + 'cn_composition': cn_hdr.cn_composition, + 'cn_tx_name': cn_hdr.cn_tx_name, + 'cn_si_source': cn_hdr.cn_si_source, + 'cn_cc_conversion': cn_hdr.cn_cc_conversion, + 'cn_data': cn_hdr.cn_data, + 'cn_md_unit': cn_hdr.cn_md_unit, + 'cn_md_comment': cn_hdr.cn_md_comment, + 'cn_type': cn_dat.cn_type, + 'cn_sync_type': cn_dat.cn_sync_type, + 'cn_data_type': cn_dat.cn_data_type, + 'cn_bit_offset': cn_dat.cn_bit_offset, + 'cn_byte_offset': cn_dat.cn_byte_offset, + 'cn_bit_count': cn_dat.cn_bit_count, + 'cn_flags': cn_dat.cn_flags, + 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, + 'cn_precision': cn_dat.cn_precision, + 'cn_reserved': 0, + 'cn_attachment_count': cn_dat.cn_attachment_count, + 'cn_val_range_min': cn_dat.cn_val_range_min, + 'cn_val_range_max': cn_dat.cn_val_range_max, + 'cn_default_x': None, + 'name': cn_name, + } + + # ── Handle extra links (attachments, default_x) ─────────────────────── + if cn_hdr.link_count > 8: + n_extra = ((cn_hdr.link_count) - 8) * 8 + if n_extra <= 512: + with nogil: + nread = c_pread(fd, extra_buf, n_extra, pointer + 88) + if nread == n_extra: + extra_links = [] + for i in range(0, n_extra, 8): + lnk = 0 + memcpy(&lnk, extra_buf + i, 8) + extra_links.append(lnk) + if cn_dat.cn_attachment_count > 0: + cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] + if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: + cn_dict['cn_default_x'] = extra_links[cn_dat.cn_attachment_count:] + + # ── Read unit (TX or MD block) ───────────────────────────────────────── + if not channel_name_list: + if cn_hdr.cn_md_unit: + unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) + if unit_str: + cn_dict['unit'] = unit_str + elif cn_dat.cn_sync_type == 1: + cn_dict['unit'] = 's' + elif cn_dat.cn_sync_type == 2: + cn_dict['unit'] = 'rad' + elif cn_dat.cn_sync_type == 3: + cn_dict['unit'] = 'm' + elif cn_dat.cn_sync_type == 1: + cn_dict['unit'] = 's' + elif cn_dat.cn_sync_type == 2: + cn_dict['unit'] = 'rad' + elif cn_dat.cn_sync_type == 3: + cn_dict['unit'] = 'm' + + # ── Read description (MD/TX block) ───────────────────────────────── + if cn_hdr.cn_md_comment: + desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) + if desc_str: + cn_dict['Comment'] = {'description': desc_str} + + # ── Read CC block ────────────────────────────────────────────────────── + cc_ptr = cn_hdr.cn_cc_conversion + cc_dict = {'cc_type': 0} + if cc_ptr != 0: + with nogil: + nread = c_pread(fd, &cc_hdr, 56, cc_ptr) + if nread == 56: + cc_data_offset = 24 + (cc_hdr.link_count) * 8 + with nogil: + nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) + if nread == 24: + cc_dict = { + 'pointer': cc_ptr, + 'id': b'##CC', + 'length': cc_hdr.length, + 'link_count': cc_hdr.link_count, + 'cc_tx_name': cc_hdr.cc_tx_name, + 'cc_md_unit': cc_hdr.cc_md_unit, + 'cc_md_comment': cc_hdr.cc_md_comment, + 'cc_cc_inverse': cc_hdr.cc_cc_inverse, + 'cc_type': cc_dat.cc_type, + 'cc_precision': cc_dat.cc_precision, + 'cc_flags': cc_dat.cc_flags, + 'cc_ref_count': cc_dat.cc_ref_count, + 'cc_val_count': cc_dat.cc_val_count, + 'cc_phy_range_min': cc_dat.cc_phy_range_min, + 'cc_phy_range_max': cc_dat.cc_phy_range_max, + } + # Read cc_val (doubles) for common conversion types + if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): + n_bytes = cc_dat.cc_val_count * 8 + cc_val_buf = PyMem_Malloc(n_bytes) + if cc_val_buf != NULL: + try: + with nogil: + nread = c_pread(fd, cc_val_buf, + n_bytes, + cc_ptr + cc_data_offset + 24) + if nread == n_bytes: + dbl_ptr = cc_val_buf + cc_val_list = [] + for i in range(cc_dat.cc_val_count): + cc_val_list.append(dbl_ptr[i]) + cc_dict['cc_val'] = cc_val_list + finally: + PyMem_Free(cc_val_buf) + # Mark complex CC types for Python re-read + if cc_dat.cc_type in (3, 7, 8, 9, 10, 11): + cc_dict['_needs_completion'] = True + + # ── Read SI block (cached) ───────────────────────────────────────────── + if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: + si_ptr = cn_hdr.cn_si_source + if si_ptr not in si_cache: + si_cache[si_ptr] = _fast_read_si(fd, si_ptr) + si_dict = si_cache.get(si_ptr) + if si_dict is not None: + cn_dict['SI'] = si_dict + + results.append((cn_key, cn_dict, cc_dict)) + pointer = cn_hdr.cn_cn_next + + return results + + @cython.boundscheck(False) @cython.wraparound(False) def sorted_data_read(bytes tmp, unsigned short bit_count, diff --git a/mdfreader/mdfinfo4.py b/mdfreader/mdfinfo4.py index 787e5d0..c9957b3 100644 --- a/mdfreader/mdfinfo4.py +++ b/mdfreader/mdfinfo4.py @@ -39,6 +39,12 @@ except ImportError: _SYMBUF_AVAILABLE = False +try: + from dataRead import read_cn_chain_fast as _read_cn_chain_fast + _CN_CHAIN_FAST = True +except ImportError: + _CN_CHAIN_FAST = False + # datatypes _LINK = ' Date: Thu, 9 Apr 2026 07:59:27 +0200 Subject: [PATCH 3/4] docs: comprehensive documentation for fast metadata reader and Info4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit README.md: - Add Performance section documenting read_cn_chain_fast, SymBufReader and vectorised data reading with benchmark table (1.9s → 0.6s on 36k channels) - Expand Requirements into structured table; clarify Cython fallback - Rewrite Installation with build-from-source steps - Convert channel-structure list to a table; document masterChannelList - Memory-saving options expanded into descriptive bullets mdfinfo4.py: - Module docstring rewritten: explains fast vs. fallback path, key classes, design constraints (why CC val/ref and composition stay in Python) - Info4 class docstring: full Attributes section including _si_cache, complete dictionary layout table with all top-level keys and their meaning dataRead.pyx: - Fast-reader section header expanded with technique summary and design constraints - All six C packed structs documented with field-level comments including value enumerations, bit flags, and byte-offset rationale - _fast_read_tx_or_md, _fast_read_si docstrings expanded Co-Authored-By: Claude Sonnet 4.6 --- README.md | 141 +- dataRead.c | 4890 ++++++++++++++++++++--------------------- dataRead.pyx | 204 +- mdfreader/mdfinfo4.py | 120 +- 4 files changed, 2770 insertions(+), 2585 deletions(-) diff --git a/README.md b/README.md index 2b5bee1..41d7254 100644 --- a/README.md +++ b/README.md @@ -3,20 +3,58 @@ Abstract: ========= -This Module imports MDF files (Measured Data Format V3.x and V4.x), typically from INCA (ETAS), CANape or CANOe. It is widely used in automotive industry to record data from ECUs. The main module mdfreader.py inherits from 2 modules (One pair for each MDF version X) : The first one to read the file's blocks descriptions (mdfinfoX) and the second (mdfXreader) to read the raw data from the file. It can optionally run multithreaded. It was built in mind to process efficiently big amount of data in a batch, endurance evaluation files for data mining. +This module imports MDF files (Measured Data Format V3.x and V4.x), typically +from INCA (ETAS), CANape or CANoe. It is widely used in the automotive industry +to record data from ECUs. The main module `mdfreader.py` inherits from two +module pairs (one per MDF version): the first reads the file's block structure +(`mdfinfoX`), and the second reads the raw data (`mdfXreader`). It can +optionally run multithreaded and was designed for efficient batch processing of +large endurance-evaluation files for data mining. + +Performance: +============ +When Cython is available (strongly recommended), mdfreader uses several +low-level optimisations: + +* **Fast CN/CC/SI/TX metadata reader** (`read_cn_chain_fast` in `dataRead.pyx`): + walks the entire MDF4 channel linked list in a single Cython function using + POSIX `pread()` (no Python file-object dispatch, no GIL during I/O) and + C packed-struct `memcpy` parsing. A fast `` bytes scan replaces + `lxml.objectify` for the common MD-block pattern (~95% of files). Result: + **3–4× speedup** on large files compared to the pure-Python path. + +* **SymBufReader**: a Cython bidirectional-buffered wrapper around the raw file + object. MDF4 metadata blocks are linked by backward-pointing pointers; + `SymBufReader` keeps a 64 KB buffer centred on the current position so that + most seeks are served from cache without a kernel `read()`. + +* **Vectorised data reading**: sorted channel groups are read in a single + `readinto()` call into a flat `uint8` buffer that is then reinterpreted as a + structured record array — zero copies, no per-chunk Python loop. + +Typical timings on a 184 MB / 36 000-channel MDF4 file: + +| Scenario | Time | +|-------------------|--------| +| Pure Python path | ~1.9 s | +| v4.2 with Cython | ~1.9 s | +| v4.3 (this version) | **~0.6 s** | The structure of the mdf object inheriting from python dict =========================================================== -for each channel: mdf[channelName] below keys exist -* data: numpy array -* unit: unit name -* master : master channel name of channelName -* masterType : type of master channel (time, angle, distance, etc.) -* description : description of channel -* conversion: (exist when reading with convertAfterRead=False) dictionary describing how to convert raw data into meaningful/physical data +For each channel `mdf[channelName]` the following keys exist: -mdf object main attribute: masterChannelList, a dict containing a list of channel names per datagroup +| Key | Description | +|-----|-------------| +| `data` | numpy array of channel values | +| `unit` | unit string | +| `master` | name of the master (time/angle/…) channel | +| `masterType` | master channel type: 0=None, 1=Time, 2=Angle, 3=Distance, 4=Index | +| `description` | channel description string | +| `conversion` | present when `convert_after_read=False`; dict describing raw→physical mapping | +`mdf.masterChannelList` is a dict mapping each master channel name to the list +of channels sampled at the same raster. Mdfreader module methods: ========================= @@ -25,58 +63,83 @@ Mdfreader module methods: * plot one channel, several channels on one graph (list) or several channels on subplots (list of lists) It is also possible to export mdf data into: -* CSV file (excel dialect by default) -* NetCDF file for a compatibility with Uniplot for instance (needs netcdf4, Scientific.IO) -* HDF5 (needs h5py) -* Excel 95 to 2003 (needs xlwt, extremely slooow, be careful about data size) -* Excel 2007/2010 (needs openpyxl, can be also slow with big files) -* Matlab .mat (needs hdf5storage) -* MDF file. It allows you to create, convert or modify data, units, description and save it again. -* Pandas dataframe(s) (only in command line, not in mdfconverter). One dataframe per raster. +* CSV file (Excel dialect by default) +* NetCDF file for compatibility with Uniplot (needs `netcdf4`, `Scientific.IO`) +* HDF5 (needs `h5py`) +* Excel 95–2003 (needs `xlwt` — very slow for large files) +* Excel 2007/2010 (needs `openpyxl` — can also be slow with large files) +* Matlab `.mat` (needs `hdf5storage`) +* MDF file — allows creating, converting or modifying data, units and descriptions +* Pandas DataFrame(s) (command line only, not in mdfconverter) — one DataFrame per raster Compatibility: ============== -This code is compatible for python 3.4+ -Evaluated for Windows and Linux platforms (x86 and AMD64) +Python 3.9+ — tested on Linux and Windows (x86-64) Requirements: ============= -Mdfreader is mostly relying on numpy/scipy/matplotlib and lxml for parsing the metadata in mdf version 4.x files +Core: `numpy`, `lxml`, `sympy` -Reading channels defined by a formula will require sympy. +`lxml` is used for MDF4 metadata XML blocks. When Cython is compiled, the fast +path handles the common `` pattern directly from bytes and only falls +back to `lxml` for complex XML (CDATA, namespaces). -Cython is strongly advised and allows to compile dataRead module for reading quickly exotic data (not byte aligned or containing hidden bytes) or only a list of channels. However, if cython compilation fails, bitarray becomes required (slower, pure python and maybe not so robust as not so much tested). +Reading channels defined by a formula requires `sympy`. -Export requirements (optional): scipy, csv, h5py, hdf5storage, xlwt(3), openpyxl, pandas +Cython is strongly advised. It compiles `dataRead.pyx`, which provides: +* fast metadata parsing via `pread()` + C packed structs +* the `SymBufReader` bidirectional file buffer +* bit-exact reading for non-byte-aligned or record-padded channels +* VLSD/VLSC string data reading helpers -Blosc for data compression (optional) +If Cython compilation fails, `bitarray` is used as a fallback (slower, pure Python). -Mdfconverter graphical user interface requires PyQt (versions 4 or 5) +Export requirements (optional): `scipy`, `h5py`, `hdf5storage`, `openpyxl`, `pandas`, `fastparquet` + +Data compression in memory (optional): `blosc` + +Graphical converter: `PyQt5` Installation: ============= -pip package existing: +From PyPI: ```shell pip install mdfreader ``` -or from source cloned from github from instance +From source: ```shell +pip install cython numpy # build prerequisites +python setup.py build_ext --inplace python setup.py develop ``` -Graphical interface: mdfconverter (PyQt4 and PyQt5) +Graphical interface: mdfconverter ================================== -User interface in PyQt4 or PyQt5 to convert batch of files is part of package. You can launch it with command 'mdfconverter' from shell. By right clicking a channel in the interface list, you can plot it. You can also drag-drop channels between columns to tune import list. Channel list from a .lab text file can be imported. You can optionally merge several files into one and even resample all of them. - -Others: -======= -In the case of big files or lack of memory, you can optionally: -* Read only a channel list (argument channel_list = ['channel', 'list'], you can get the file channel list without loading data with mdfinfo) -* Keep raw data as stored in mdf without data type conversion (argument convert_after_read=False). Data will then be converted on the fly by the other functions (plot, export_to..., get_channel_data, etc.) but raw data type will remain as in mdf file along with conversion information. -* Compress data in memory with blosc with argument compression. Default compression level is 9. -* Create a mdf dict with its metadata but without data (argument no_data_loading=True). Data will be read from file on demand by mdfreader methods (in general by get_channel_data method) - -For great data visualization, dataPlugin for Veusz (from 1.16, http://home.gna.org/veusz/) is also existing ; please follow instructions from Veusz documentation and plugin file's header. +A PyQt5 GUI to convert batches of files. Launch with: +```shell +mdfconverter +``` +Right-click a channel in the list to plot it. Channels can be dragged between +columns. A `.lab` channel-list file can be imported. Multiple files can be +merged into one and resampled. + +Memory-saving options: +====================== +For large files or limited memory: + +* **Channel list only** — pass `channel_list=['ch1', 'ch2']`; call + `mdfreader.MdfInfo(file)` to get the full channel list without loading data. +* **Raw data mode** — pass `convert_after_read=False`; data stays as stored in + the MDF file and is converted on-the-fly by `get_channel_data`, `plot`, + `export_to_*`, etc. +* **Blosc compression** — pass `compression=True` (default level 9) to compress + data in memory after reading. +* **No-data skeleton** — pass `no_data_loading=True` to build the channel + metadata dict without reading any samples; data is fetched on demand via + `get_channel_data`. + +For data visualisation, a dataPlugin for Veusz (≥ 1.16) is also available; +follow the instructions in Veusz's documentation and the plugin file's header. Command example in ipython: =========================== diff --git a/dataRead.c b/dataRead.c index 8f03eb5..7ea3b82 100644 --- a/dataRead.c +++ b/dataRead.c @@ -1895,12 +1895,12 @@ struct __pyx_t_8dataRead__CCData; struct __pyx_t_8dataRead__SIBlock; struct __pyx_t_8dataRead__TXHdr; -/* "dataRead.pyx":115 - * # All structs are packed (no padding) to match the binary layout. - * - * cdef packed struct _CNFixedHdr: # 88 bytes: 24-byte header + 8 standard links # <<<<<<<<<<<<<< - * char id[4] - * uint32_t reserved +/* "dataRead.pyx":145 + * # _CNFixedHdr 88 bytes: 24-byte common header + 8 standard CN link fields. + * # Extra links (attachments, default-X) follow at offset 88 when link_count > 8. + * cdef packed struct _CNFixedHdr: # <<<<<<<<<<<<<< + * char id[4] # b'##CN' + * uint32_t reserved # padding (0) */ #if defined(__SUNPRO_C) #pragma pack(1) @@ -1927,12 +1927,12 @@ struct __Pyx_PACKED __pyx_t_8dataRead__CNFixedHdr { #pragma pack(pop) #endif -/* "dataRead.pyx":129 - * uint64_t cn_md_comment +/* "dataRead.pyx":161 * - * cdef packed struct _CNData: # 72 bytes data section # <<<<<<<<<<<<<< - * uint8_t cn_type - * uint8_t cn_sync_type + * # _CNData 72 bytes: data section located at offset 24 + link_count*8. + * cdef packed struct _CNData: # <<<<<<<<<<<<<< + * uint8_t cn_type # 0=fixed-length, 1=VLSD, 2=master, + * # 3=virtual master, 4=sync, 5=MLSD, */ #if defined(__SUNPRO_C) #pragma pack(1) @@ -1964,11 +1964,11 @@ struct __Pyx_PACKED __pyx_t_8dataRead__CNData { #pragma pack(pop) #endif -/* "dataRead.pyx":148 - * double cn_limit_ext_max - * - * cdef packed struct _CCFixedHdr: # 56 bytes: 24-byte header + 4 standard links # <<<<<<<<<<<<<< - * char id[4] +/* "dataRead.pyx":184 + * # _CCFixedHdr 56 bytes: 24-byte header + 4 standard CC link fields. + * # Additional cc_ref links follow at offset 56 when link_count > 4. + * cdef packed struct _CCFixedHdr: # <<<<<<<<<<<<<< + * char id[4] # b'##CC' * uint32_t reserved */ #if defined(__SUNPRO_C) @@ -1992,12 +1992,12 @@ struct __Pyx_PACKED __pyx_t_8dataRead__CCFixedHdr { #pragma pack(pop) #endif -/* "dataRead.pyx":158 - * uint64_t cc_cc_inverse - * - * cdef packed struct _CCData: # 24 bytes data section # <<<<<<<<<<<<<< - * uint8_t cc_type - * uint8_t cc_precision +/* "dataRead.pyx":196 + * # _CCData 24 bytes: data section at offset 24 + link_count*8. + * # cc_val doubles and cc_ref links follow after this section. + * cdef packed struct _CCData: # <<<<<<<<<<<<<< + * uint8_t cc_type # 0=identity, 1=linear, 2=rational, 3=formula, + * # 4=tab-interp, 5=tab, 6=rangevalue, */ #if defined(__SUNPRO_C) #pragma pack(1) @@ -2019,11 +2019,11 @@ struct __Pyx_PACKED __pyx_t_8dataRead__CCData { #pragma pack(pop) #endif -/* "dataRead.pyx":167 - * double cc_phy_range_max +/* "dataRead.pyx":209 * - * cdef packed struct _SIBlock: # 56 bytes total (header + 3 links + data) # <<<<<<<<<<<<<< - * char id[4] + * # _SIBlock 56 bytes total: 24-byte header + 3 link fields + 8 data bytes. + * cdef packed struct _SIBlock: # <<<<<<<<<<<<<< + * char id[4] # b'##SI' * uint32_t reserved */ #if defined(__SUNPRO_C) @@ -2050,11 +2050,11 @@ struct __Pyx_PACKED __pyx_t_8dataRead__SIBlock { #pragma pack(pop) #endif -/* "dataRead.pyx":180 - * char si_reserved[5] - * - * cdef packed struct _TXHdr: # 24 bytes # <<<<<<<<<<<<<< - * char id[4] +/* "dataRead.pyx":225 + * # _TXHdr 24-byte common header shared by TX (plain text) and MD (XML) blocks. + * # The text/XML payload immediately follows at offset 24. + * cdef packed struct _TXHdr: # <<<<<<<<<<<<<< + * char id[4] # b'##TX' (plain text) or b'##MD' (XML) * uint32_t reserved */ #if defined(__SUNPRO_C) @@ -23547,7 +23547,7 @@ static PyObject *__pyx_pf_8dataRead_12SymBufReader_12__setstate_cython__(struct return __pyx_r; } -/* "dataRead.pyx":187 +/* "dataRead.pyx":232 * * * cdef str _fast_read_tx(int fd, uint64_t pointer): # <<<<<<<<<<<<<< @@ -23583,7 +23583,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_fast_read_tx", 1); - /* "dataRead.pyx":194 + /* "dataRead.pyx":239 * cdef str result * * if pointer == 0: # <<<<<<<<<<<<<< @@ -23593,7 +23593,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_t_1 = (__pyx_v_pointer == 0); if (__pyx_t_1) { - /* "dataRead.pyx":195 + /* "dataRead.pyx":240 * * if pointer == 0: * return '' # <<<<<<<<<<<<<< @@ -23605,7 +23605,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_r = __pyx_kp_u__12; goto __pyx_L0; - /* "dataRead.pyx":194 + /* "dataRead.pyx":239 * cdef str result * * if pointer == 0: # <<<<<<<<<<<<<< @@ -23614,7 +23614,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ } - /* "dataRead.pyx":196 + /* "dataRead.pyx":241 * if pointer == 0: * return '' * with nogil: # <<<<<<<<<<<<<< @@ -23630,7 +23630,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ #endif /*try:*/ { - /* "dataRead.pyx":197 + /* "dataRead.pyx":242 * return '' * with nogil: * nread = c_pread(fd, &hdr, 24, pointer) # <<<<<<<<<<<<<< @@ -23640,7 +23640,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_hdr), 24, __pyx_v_pointer); } - /* "dataRead.pyx":196 + /* "dataRead.pyx":241 * if pointer == 0: * return '' * with nogil: # <<<<<<<<<<<<<< @@ -23659,7 +23659,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ } } - /* "dataRead.pyx":198 + /* "dataRead.pyx":243 * with nogil: * nread = c_pread(fd, &hdr, 24, pointer) * if nread < 24 or hdr.length <= 24: # <<<<<<<<<<<<<< @@ -23677,7 +23677,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_L8_bool_binop_done:; if (__pyx_t_1) { - /* "dataRead.pyx":199 + /* "dataRead.pyx":244 * nread = c_pread(fd, &hdr, 24, pointer) * if nread < 24 or hdr.length <= 24: * return '' # <<<<<<<<<<<<<< @@ -23689,7 +23689,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_r = __pyx_kp_u__12; goto __pyx_L0; - /* "dataRead.pyx":198 + /* "dataRead.pyx":243 * with nogil: * nread = c_pread(fd, &hdr, 24, pointer) * if nread < 24 or hdr.length <= 24: # <<<<<<<<<<<<<< @@ -23698,7 +23698,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ } - /* "dataRead.pyx":200 + /* "dataRead.pyx":245 * if nread < 24 or hdr.length <= 24: * return '' * content_len = (hdr.length - 24) # <<<<<<<<<<<<<< @@ -23707,7 +23707,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ __pyx_v_content_len = ((Py_ssize_t)(__pyx_v_hdr.length - 24)); - /* "dataRead.pyx":201 + /* "dataRead.pyx":246 * return '' * content_len = (hdr.length - 24) * if content_len <= 0: # <<<<<<<<<<<<<< @@ -23717,7 +23717,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_t_1 = (__pyx_v_content_len <= 0); if (__pyx_t_1) { - /* "dataRead.pyx":202 + /* "dataRead.pyx":247 * content_len = (hdr.length - 24) * if content_len <= 0: * return '' # <<<<<<<<<<<<<< @@ -23729,7 +23729,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_r = __pyx_kp_u__12; goto __pyx_L0; - /* "dataRead.pyx":201 + /* "dataRead.pyx":246 * return '' * content_len = (hdr.length - 24) * if content_len <= 0: # <<<<<<<<<<<<<< @@ -23738,7 +23738,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ } - /* "dataRead.pyx":203 + /* "dataRead.pyx":248 * if content_len <= 0: * return '' * buf = PyMem_Malloc(content_len + 1) # <<<<<<<<<<<<<< @@ -23747,7 +23747,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ __pyx_v_buf = ((unsigned char *)PyMem_Malloc((__pyx_v_content_len + 1))); - /* "dataRead.pyx":204 + /* "dataRead.pyx":249 * return '' * buf = PyMem_Malloc(content_len + 1) * if buf == NULL: # <<<<<<<<<<<<<< @@ -23757,7 +23757,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_t_1 = (__pyx_v_buf == NULL); if (__pyx_t_1) { - /* "dataRead.pyx":205 + /* "dataRead.pyx":250 * buf = PyMem_Malloc(content_len + 1) * if buf == NULL: * return '' # <<<<<<<<<<<<<< @@ -23769,7 +23769,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_r = __pyx_kp_u__12; goto __pyx_L0; - /* "dataRead.pyx":204 + /* "dataRead.pyx":249 * return '' * buf = PyMem_Malloc(content_len + 1) * if buf == NULL: # <<<<<<<<<<<<<< @@ -23778,7 +23778,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ } - /* "dataRead.pyx":206 + /* "dataRead.pyx":251 * if buf == NULL: * return '' * try: # <<<<<<<<<<<<<< @@ -23787,7 +23787,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ /*try:*/ { - /* "dataRead.pyx":207 + /* "dataRead.pyx":252 * return '' * try: * with nogil: # <<<<<<<<<<<<<< @@ -23803,7 +23803,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ #endif /*try:*/ { - /* "dataRead.pyx":208 + /* "dataRead.pyx":253 * try: * with nogil: * nread = c_pread(fd, buf, content_len, pointer + 24) # <<<<<<<<<<<<<< @@ -23813,7 +23813,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_v_nread = pread(__pyx_v_fd, __pyx_v_buf, __pyx_v_content_len, (__pyx_v_pointer + 24)); } - /* "dataRead.pyx":207 + /* "dataRead.pyx":252 * return '' * try: * with nogil: # <<<<<<<<<<<<<< @@ -23832,7 +23832,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ } } - /* "dataRead.pyx":209 + /* "dataRead.pyx":254 * with nogil: * nread = c_pread(fd, buf, content_len, pointer + 24) * if nread < 1: # <<<<<<<<<<<<<< @@ -23842,7 +23842,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_t_1 = (__pyx_v_nread < 1); if (__pyx_t_1) { - /* "dataRead.pyx":210 + /* "dataRead.pyx":255 * nread = c_pread(fd, buf, content_len, pointer + 24) * if nread < 1: * return '' # <<<<<<<<<<<<<< @@ -23854,7 +23854,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_r = __pyx_kp_u__12; goto __pyx_L12_return; - /* "dataRead.pyx":209 + /* "dataRead.pyx":254 * with nogil: * nread = c_pread(fd, buf, content_len, pointer + 24) * if nread < 1: # <<<<<<<<<<<<<< @@ -23863,7 +23863,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ } - /* "dataRead.pyx":211 + /* "dataRead.pyx":256 * if nread < 1: * return '' * end = nread # <<<<<<<<<<<<<< @@ -23872,7 +23872,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ __pyx_v_end = __pyx_v_nread; - /* "dataRead.pyx":212 + /* "dataRead.pyx":257 * return '' * end = nread * while end > 0 and buf[end - 1] == 0: # <<<<<<<<<<<<<< @@ -23891,7 +23891,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_L21_bool_binop_done:; if (!__pyx_t_1) break; - /* "dataRead.pyx":213 + /* "dataRead.pyx":258 * end = nread * while end > 0 and buf[end - 1] == 0: * end -= 1 # <<<<<<<<<<<<<< @@ -23901,7 +23901,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_v_end = (__pyx_v_end - 1); } - /* "dataRead.pyx":214 + /* "dataRead.pyx":259 * while end > 0 and buf[end - 1] == 0: * end -= 1 * buf[end] = 0 # <<<<<<<<<<<<<< @@ -23910,27 +23910,27 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ */ (__pyx_v_buf[__pyx_v_end]) = 0; - /* "dataRead.pyx":215 + /* "dataRead.pyx":260 * end -= 1 * buf[end] = 0 * result = (buf[:end]).decode('UTF-8', 'ignore') # <<<<<<<<<<<<<< * finally: * PyMem_Free(buf) */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 215, __pyx_L13_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 260, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_3); if (unlikely(__pyx_t_3 == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(0, 215, __pyx_L13_error) + __PYX_ERR(0, 260, __pyx_L13_error) } - __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_t_3), 0, PY_SSIZE_T_MAX, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 215, __pyx_L13_error) + __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_t_3), 0, PY_SSIZE_T_MAX, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 260, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_result = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; } - /* "dataRead.pyx":217 + /* "dataRead.pyx":262 * result = (buf[:end]).decode('UTF-8', 'ignore') * finally: * PyMem_Free(buf) # <<<<<<<<<<<<<< @@ -23986,7 +23986,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ __pyx_L14:; } - /* "dataRead.pyx":218 + /* "dataRead.pyx":263 * finally: * PyMem_Free(buf) * return result # <<<<<<<<<<<<<< @@ -23994,12 +23994,12 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ * */ __Pyx_XDECREF(__pyx_r); - if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); __PYX_ERR(0, 218, __pyx_L1_error) } + if (unlikely(!__pyx_v_result)) { __Pyx_RaiseUnboundLocalError("result"); __PYX_ERR(0, 263, __pyx_L1_error) } __Pyx_INCREF(__pyx_v_result); __pyx_r = __pyx_v_result; goto __pyx_L0; - /* "dataRead.pyx":187 + /* "dataRead.pyx":232 * * * cdef str _fast_read_tx(int fd, uint64_t pointer): # <<<<<<<<<<<<<< @@ -24020,11 +24020,11 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx(int __pyx_v_fd, uint64_t __pyx_ return __pyx_r; } -/* "dataRead.pyx":221 +/* "dataRead.pyx":266 * * * cdef str _fast_read_tx_or_md(int fd, uint64_t pointer): # <<<<<<<<<<<<<< - * """Read TX or MD block via pread. + * """Read a TX or MD block and return its text content. * */ @@ -24064,7 +24064,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_fast_read_tx_or_md", 1); - /* "dataRead.pyx":234 + /* "dataRead.pyx":289 * cdef str result * * if pointer == 0: # <<<<<<<<<<<<<< @@ -24074,7 +24074,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_t_1 = (__pyx_v_pointer == 0); if (__pyx_t_1) { - /* "dataRead.pyx":235 + /* "dataRead.pyx":290 * * if pointer == 0: * return '' # <<<<<<<<<<<<<< @@ -24086,7 +24086,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_r = __pyx_kp_u__12; goto __pyx_L0; - /* "dataRead.pyx":234 + /* "dataRead.pyx":289 * cdef str result * * if pointer == 0: # <<<<<<<<<<<<<< @@ -24095,7 +24095,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ } - /* "dataRead.pyx":236 + /* "dataRead.pyx":291 * if pointer == 0: * return '' * with nogil: # <<<<<<<<<<<<<< @@ -24111,7 +24111,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t #endif /*try:*/ { - /* "dataRead.pyx":237 + /* "dataRead.pyx":292 * return '' * with nogil: * nread = c_pread(fd, &hdr, 24, pointer) # <<<<<<<<<<<<<< @@ -24121,7 +24121,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_hdr), 24, __pyx_v_pointer); } - /* "dataRead.pyx":236 + /* "dataRead.pyx":291 * if pointer == 0: * return '' * with nogil: # <<<<<<<<<<<<<< @@ -24140,7 +24140,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t } } - /* "dataRead.pyx":238 + /* "dataRead.pyx":293 * with nogil: * nread = c_pread(fd, &hdr, 24, pointer) * if nread < 24 or hdr.length <= 24: # <<<<<<<<<<<<<< @@ -24158,7 +24158,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_L8_bool_binop_done:; if (__pyx_t_1) { - /* "dataRead.pyx":239 + /* "dataRead.pyx":294 * nread = c_pread(fd, &hdr, 24, pointer) * if nread < 24 or hdr.length <= 24: * return '' # <<<<<<<<<<<<<< @@ -24170,7 +24170,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_r = __pyx_kp_u__12; goto __pyx_L0; - /* "dataRead.pyx":238 + /* "dataRead.pyx":293 * with nogil: * nread = c_pread(fd, &hdr, 24, pointer) * if nread < 24 or hdr.length <= 24: # <<<<<<<<<<<<<< @@ -24179,7 +24179,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ } - /* "dataRead.pyx":240 + /* "dataRead.pyx":295 * if nread < 24 or hdr.length <= 24: * return '' * content_len = (hdr.length - 24) # <<<<<<<<<<<<<< @@ -24188,7 +24188,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ __pyx_v_content_len = ((Py_ssize_t)(__pyx_v_hdr.length - 24)); - /* "dataRead.pyx":241 + /* "dataRead.pyx":296 * return '' * content_len = (hdr.length - 24) * if content_len <= 0: # <<<<<<<<<<<<<< @@ -24198,7 +24198,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_t_1 = (__pyx_v_content_len <= 0); if (__pyx_t_1) { - /* "dataRead.pyx":242 + /* "dataRead.pyx":297 * content_len = (hdr.length - 24) * if content_len <= 0: * return '' # <<<<<<<<<<<<<< @@ -24210,7 +24210,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_r = __pyx_kp_u__12; goto __pyx_L0; - /* "dataRead.pyx":241 + /* "dataRead.pyx":296 * return '' * content_len = (hdr.length - 24) * if content_len <= 0: # <<<<<<<<<<<<<< @@ -24219,7 +24219,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ } - /* "dataRead.pyx":243 + /* "dataRead.pyx":298 * if content_len <= 0: * return '' * buf = PyMem_Malloc(content_len + 1) # <<<<<<<<<<<<<< @@ -24228,7 +24228,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ __pyx_v_buf = ((unsigned char *)PyMem_Malloc((__pyx_v_content_len + 1))); - /* "dataRead.pyx":244 + /* "dataRead.pyx":299 * return '' * buf = PyMem_Malloc(content_len + 1) * if buf == NULL: # <<<<<<<<<<<<<< @@ -24238,7 +24238,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_t_1 = (__pyx_v_buf == NULL); if (__pyx_t_1) { - /* "dataRead.pyx":245 + /* "dataRead.pyx":300 * buf = PyMem_Malloc(content_len + 1) * if buf == NULL: * return '' # <<<<<<<<<<<<<< @@ -24250,7 +24250,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_r = __pyx_kp_u__12; goto __pyx_L0; - /* "dataRead.pyx":244 + /* "dataRead.pyx":299 * return '' * buf = PyMem_Malloc(content_len + 1) * if buf == NULL: # <<<<<<<<<<<<<< @@ -24259,7 +24259,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ } - /* "dataRead.pyx":246 + /* "dataRead.pyx":301 * if buf == NULL: * return '' * try: # <<<<<<<<<<<<<< @@ -24268,7 +24268,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ /*try:*/ { - /* "dataRead.pyx":247 + /* "dataRead.pyx":302 * return '' * try: * with nogil: # <<<<<<<<<<<<<< @@ -24284,7 +24284,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t #endif /*try:*/ { - /* "dataRead.pyx":248 + /* "dataRead.pyx":303 * try: * with nogil: * nread = c_pread(fd, buf, content_len, pointer + 24) # <<<<<<<<<<<<<< @@ -24294,7 +24294,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_v_nread = pread(__pyx_v_fd, __pyx_v_buf, __pyx_v_content_len, (__pyx_v_pointer + 24)); } - /* "dataRead.pyx":247 + /* "dataRead.pyx":302 * return '' * try: * with nogil: # <<<<<<<<<<<<<< @@ -24313,7 +24313,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t } } - /* "dataRead.pyx":249 + /* "dataRead.pyx":304 * with nogil: * nread = c_pread(fd, buf, content_len, pointer + 24) * if nread < 1: # <<<<<<<<<<<<<< @@ -24323,7 +24323,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_t_1 = (__pyx_v_nread < 1); if (__pyx_t_1) { - /* "dataRead.pyx":250 + /* "dataRead.pyx":305 * nread = c_pread(fd, buf, content_len, pointer + 24) * if nread < 1: * return '' # <<<<<<<<<<<<<< @@ -24335,7 +24335,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_r = __pyx_kp_u__12; goto __pyx_L12_return; - /* "dataRead.pyx":249 + /* "dataRead.pyx":304 * with nogil: * nread = c_pread(fd, buf, content_len, pointer + 24) * if nread < 1: # <<<<<<<<<<<<<< @@ -24344,7 +24344,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ } - /* "dataRead.pyx":251 + /* "dataRead.pyx":306 * if nread < 1: * return '' * end = nread # <<<<<<<<<<<<<< @@ -24353,7 +24353,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ __pyx_v_end = __pyx_v_nread; - /* "dataRead.pyx":252 + /* "dataRead.pyx":307 * return '' * end = nread * while end > 0 and buf[end - 1] == 0: # <<<<<<<<<<<<<< @@ -24372,7 +24372,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_L21_bool_binop_done:; if (!__pyx_t_1) break; - /* "dataRead.pyx":253 + /* "dataRead.pyx":308 * end = nread * while end > 0 and buf[end - 1] == 0: * end -= 1 # <<<<<<<<<<<<<< @@ -24382,7 +24382,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_v_end = (__pyx_v_end - 1); } - /* "dataRead.pyx":255 + /* "dataRead.pyx":310 * end -= 1 * # TX block (id[2]=='T', id[3]=='X') * if hdr.id[2] == b'T' and hdr.id[3] == b'X': # <<<<<<<<<<<<<< @@ -24400,7 +24400,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_L24_bool_binop_done:; if (__pyx_t_1) { - /* "dataRead.pyx":256 + /* "dataRead.pyx":311 * # TX block (id[2]=='T', id[3]=='X') * if hdr.id[2] == b'T' and hdr.id[3] == b'X': * buf[end] = 0 # <<<<<<<<<<<<<< @@ -24409,26 +24409,26 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ (__pyx_v_buf[__pyx_v_end]) = 0; - /* "dataRead.pyx":257 + /* "dataRead.pyx":312 * if hdr.id[2] == b'T' and hdr.id[3] == b'X': * buf[end] = 0 * result = (buf[:end]).decode('UTF-8', 'ignore') # <<<<<<<<<<<<<< * return result * # MD block: fast ... scan */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 257, __pyx_L13_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 312, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_3); if (unlikely(__pyx_t_3 == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(0, 257, __pyx_L13_error) + __PYX_ERR(0, 312, __pyx_L13_error) } - __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_t_3), 0, PY_SSIZE_T_MAX, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L13_error) + __pyx_t_4 = __Pyx_decode_bytes(((PyObject*)__pyx_t_3), 0, PY_SSIZE_T_MAX, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 312, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_result = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":258 + /* "dataRead.pyx":313 * buf[end] = 0 * result = (buf[:end]).decode('UTF-8', 'ignore') * return result # <<<<<<<<<<<<<< @@ -24440,7 +24440,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_r = __pyx_v_result; goto __pyx_L12_return; - /* "dataRead.pyx":255 + /* "dataRead.pyx":310 * end -= 1 * # TX block (id[2]=='T', id[3]=='X') * if hdr.id[2] == b'T' and hdr.id[3] == b'X': # <<<<<<<<<<<<<< @@ -24449,35 +24449,35 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ } - /* "dataRead.pyx":260 + /* "dataRead.pyx":315 * return result * # MD block: fast ... scan * payload = bytes(buf[:end]) # <<<<<<<<<<<<<< * tx_start = payload.find(b'') * if tx_start >= 0: */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 260, __pyx_L13_error) + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_buf) + 0, __pyx_v_end - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 315, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 260, __pyx_L13_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 315, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_payload = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":261 + /* "dataRead.pyx":316 * # MD block: fast ... scan * payload = bytes(buf[:end]) * tx_start = payload.find(b'') # <<<<<<<<<<<<<< * if tx_start >= 0: * tx_start += 4 */ - __pyx_t_3 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyBytes_Type_find, __pyx_v_payload, __pyx_kp_b_TX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 261, __pyx_L13_error) + __pyx_t_3 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyBytes_Type_find, __pyx_v_payload, __pyx_kp_b_TX); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 261, __pyx_L13_error) + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 316, __pyx_L13_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_tx_start = __pyx_t_5; - /* "dataRead.pyx":262 + /* "dataRead.pyx":317 * payload = bytes(buf[:end]) * tx_start = payload.find(b'') * if tx_start >= 0: # <<<<<<<<<<<<<< @@ -24487,7 +24487,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_t_1 = (__pyx_v_tx_start >= 0); if (__pyx_t_1) { - /* "dataRead.pyx":263 + /* "dataRead.pyx":318 * tx_start = payload.find(b'') * if tx_start >= 0: * tx_start += 4 # <<<<<<<<<<<<<< @@ -24496,23 +24496,23 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ __pyx_v_tx_start = (__pyx_v_tx_start + 4); - /* "dataRead.pyx":264 + /* "dataRead.pyx":319 * if tx_start >= 0: * tx_start += 4 * tx_end = payload.find(b'', tx_start) # <<<<<<<<<<<<<< * if tx_end >= 0: * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') */ - __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_tx_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L13_error) + __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_tx_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 319, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyBytes_Type_find, __pyx_v_payload, __pyx_kp_b_TX_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 264, __pyx_L13_error) + __pyx_t_4 = __Pyx_CallUnboundCMethod2(&__pyx_umethod_PyBytes_Type_find, __pyx_v_payload, __pyx_kp_b_TX_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 319, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 264, __pyx_L13_error) + __pyx_t_5 = __Pyx_PyIndex_AsSsize_t(__pyx_t_4); if (unlikely((__pyx_t_5 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 319, __pyx_L13_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_tx_end = __pyx_t_5; - /* "dataRead.pyx":265 + /* "dataRead.pyx":320 * tx_start += 4 * tx_end = payload.find(b'', tx_start) * if tx_end >= 0: # <<<<<<<<<<<<<< @@ -24522,7 +24522,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_t_1 = (__pyx_v_tx_end >= 0); if (__pyx_t_1) { - /* "dataRead.pyx":266 + /* "dataRead.pyx":321 * tx_end = payload.find(b'', tx_start) * if tx_end >= 0: * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') # <<<<<<<<<<<<<< @@ -24530,13 +24530,13 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t * try: */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_decode_bytes(__pyx_v_payload, __pyx_v_tx_start, __pyx_v_tx_end, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 266, __pyx_L13_error) + __pyx_t_4 = __Pyx_decode_bytes(__pyx_v_payload, __pyx_v_tx_start, __pyx_v_tx_end, NULL, ((char const *)"ignore"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 321, __pyx_L13_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L12_return; - /* "dataRead.pyx":265 + /* "dataRead.pyx":320 * tx_start += 4 * tx_end = payload.find(b'', tx_start) * if tx_end >= 0: # <<<<<<<<<<<<<< @@ -24545,7 +24545,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ } - /* "dataRead.pyx":262 + /* "dataRead.pyx":317 * payload = bytes(buf[:end]) * tx_start = payload.find(b'') * if tx_start >= 0: # <<<<<<<<<<<<<< @@ -24554,7 +24554,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t */ } - /* "dataRead.pyx":268 + /* "dataRead.pyx":323 * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') * # CDATA or namespaced XML: attempt lxml parse * try: # <<<<<<<<<<<<<< @@ -24570,36 +24570,36 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_XGOTREF(__pyx_t_8); /*try:*/ { - /* "dataRead.pyx":269 + /* "dataRead.pyx":324 * # CDATA or namespaced XML: attempt lxml parse * try: * from lxml import objectify as _obj # <<<<<<<<<<<<<< * xml_tree = _obj.fromstring(payload) * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. */ - __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L28_error) + __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_n_s_objectify); __Pyx_GIVEREF(__pyx_n_s_objectify); - if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_objectify)) __PYX_ERR(0, 269, __pyx_L28_error); - __pyx_t_3 = __Pyx_Import(__pyx_n_s_lxml, __pyx_t_4, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L28_error) + if (__Pyx_PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s_objectify)) __PYX_ERR(0, 324, __pyx_L28_error); + __pyx_t_3 = __Pyx_Import(__pyx_n_s_lxml, __pyx_t_4, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_objectify); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L28_error) + __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_objectify); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 324, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_4); __pyx_v__obj = __pyx_t_4; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":270 + /* "dataRead.pyx":325 * try: * from lxml import objectify as _obj * xml_tree = _obj.fromstring(payload) # <<<<<<<<<<<<<< * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. * try: */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__obj, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L28_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v__obj, __pyx_n_s_fromstring); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 325, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_9 = NULL; __pyx_t_10 = 0; @@ -24619,14 +24619,14 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_payload}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_10, 1+__pyx_t_10); __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L28_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 325, __pyx_L28_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __pyx_v_xml_tree = __pyx_t_3; __pyx_t_3 = 0; - /* "dataRead.pyx":272 + /* "dataRead.pyx":327 * xml_tree = _obj.fromstring(payload) * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. * try: # <<<<<<<<<<<<<< @@ -24642,7 +24642,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_XGOTREF(__pyx_t_13); /*try:*/ { - /* "dataRead.pyx":273 + /* "dataRead.pyx":328 * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. * try: * return str(xml_tree.TX) # <<<<<<<<<<<<<< @@ -24650,16 +24650,16 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t * pass */ __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L34_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 328, __pyx_L34_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L34_error) + __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 328, __pyx_L34_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L38_try_return; - /* "dataRead.pyx":272 + /* "dataRead.pyx":327 * xml_tree = _obj.fromstring(payload) * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. * try: # <<<<<<<<<<<<<< @@ -24672,7 +24672,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "dataRead.pyx":274 + /* "dataRead.pyx":329 * try: * return str(xml_tree.TX) * except AttributeError: # <<<<<<<<<<<<<< @@ -24686,7 +24686,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t } goto __pyx_L36_except_error; - /* "dataRead.pyx":272 + /* "dataRead.pyx":327 * xml_tree = _obj.fromstring(payload) * # Try common paths: TX, CNcomment.TX, CNunit.TX, etc. * try: # <<<<<<<<<<<<<< @@ -24712,7 +24712,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); } - /* "dataRead.pyx":276 + /* "dataRead.pyx":331 * except AttributeError: * pass * try: # <<<<<<<<<<<<<< @@ -24728,7 +24728,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_XGOTREF(__pyx_t_11); /*try:*/ { - /* "dataRead.pyx":277 + /* "dataRead.pyx":332 * pass * try: * return str(xml_tree.CNcomment.TX) # <<<<<<<<<<<<<< @@ -24736,19 +24736,19 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t * pass */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_CNcomment); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L40_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_CNcomment); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 332, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 277, __pyx_L40_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 332, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L40_error) + __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 332, __pyx_L40_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L44_try_return; - /* "dataRead.pyx":276 + /* "dataRead.pyx":331 * except AttributeError: * pass * try: # <<<<<<<<<<<<<< @@ -24761,7 +24761,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "dataRead.pyx":278 + /* "dataRead.pyx":333 * try: * return str(xml_tree.CNcomment.TX) * except AttributeError: # <<<<<<<<<<<<<< @@ -24775,7 +24775,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t } goto __pyx_L42_except_error; - /* "dataRead.pyx":276 + /* "dataRead.pyx":331 * except AttributeError: * pass * try: # <<<<<<<<<<<<<< @@ -24801,7 +24801,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11); } - /* "dataRead.pyx":280 + /* "dataRead.pyx":335 * except AttributeError: * pass * try: # <<<<<<<<<<<<<< @@ -24817,7 +24817,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_XGOTREF(__pyx_t_13); /*try:*/ { - /* "dataRead.pyx":281 + /* "dataRead.pyx":336 * pass * try: * return str(xml_tree.CNunit.TX) # <<<<<<<<<<<<<< @@ -24825,19 +24825,19 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t * pass */ __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_CNunit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L46_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_xml_tree, __pyx_n_s_CNunit); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __pyx_L46_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 281, __pyx_L46_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_TX_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L46_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L46_error) + __pyx_t_4 = __Pyx_PyObject_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 336, __pyx_L46_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = ((PyObject*)__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L50_try_return; - /* "dataRead.pyx":280 + /* "dataRead.pyx":335 * except AttributeError: * pass * try: # <<<<<<<<<<<<<< @@ -24850,7 +24850,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "dataRead.pyx":282 + /* "dataRead.pyx":337 * try: * return str(xml_tree.CNunit.TX) * except AttributeError: # <<<<<<<<<<<<<< @@ -24864,7 +24864,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t } goto __pyx_L48_except_error; - /* "dataRead.pyx":280 + /* "dataRead.pyx":335 * except AttributeError: * pass * try: # <<<<<<<<<<<<<< @@ -24890,7 +24890,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13); } - /* "dataRead.pyx":268 + /* "dataRead.pyx":323 * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') * # CDATA or namespaced XML: attempt lxml parse * try: # <<<<<<<<<<<<<< @@ -24907,7 +24907,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - /* "dataRead.pyx":284 + /* "dataRead.pyx":339 * except AttributeError: * pass * except Exception: # <<<<<<<<<<<<<< @@ -24921,7 +24921,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t } goto __pyx_L30_except_error; - /* "dataRead.pyx":268 + /* "dataRead.pyx":323 * return payload[tx_start:tx_end].decode('UTF-8', 'ignore') * # CDATA or namespaced XML: attempt lxml parse * try: # <<<<<<<<<<<<<< @@ -24948,7 +24948,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t __pyx_L33_try_end:; } - /* "dataRead.pyx":286 + /* "dataRead.pyx":341 * except Exception: * pass * return '' # <<<<<<<<<<<<<< @@ -24961,7 +24961,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t goto __pyx_L12_return; } - /* "dataRead.pyx":288 + /* "dataRead.pyx":343 * return '' * finally: * PyMem_Free(buf) # <<<<<<<<<<<<<< @@ -25013,11 +25013,11 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t } } - /* "dataRead.pyx":221 + /* "dataRead.pyx":266 * * * cdef str _fast_read_tx_or_md(int fd, uint64_t pointer): # <<<<<<<<<<<<<< - * """Read TX or MD block via pread. + * """Read a TX or MD block and return its text content. * */ @@ -25038,11 +25038,11 @@ static PyObject *__pyx_f_8dataRead__fast_read_tx_or_md(int __pyx_v_fd, uint64_t return __pyx_r; } -/* "dataRead.pyx":291 +/* "dataRead.pyx":346 * * * cdef dict _fast_read_si(int fd, uint64_t pointer): # <<<<<<<<<<<<<< - * """Read SI block and return a dict matching the SIBlock format. + * """Read an SI block and return a dict matching the ``SIBlock`` Python format. * */ @@ -25064,7 +25064,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("_fast_read_si", 1); - /* "dataRead.pyx":300 + /* "dataRead.pyx":362 * cdef dict result * * if pointer == 0: # <<<<<<<<<<<<<< @@ -25074,7 +25074,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ __pyx_t_1 = (__pyx_v_pointer == 0); if (__pyx_t_1) { - /* "dataRead.pyx":301 + /* "dataRead.pyx":363 * * if pointer == 0: * return None # <<<<<<<<<<<<<< @@ -25085,7 +25085,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "dataRead.pyx":300 + /* "dataRead.pyx":362 * cdef dict result * * if pointer == 0: # <<<<<<<<<<<<<< @@ -25094,7 +25094,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ */ } - /* "dataRead.pyx":302 + /* "dataRead.pyx":364 * if pointer == 0: * return None * with nogil: # <<<<<<<<<<<<<< @@ -25110,7 +25110,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ #endif /*try:*/ { - /* "dataRead.pyx":303 + /* "dataRead.pyx":365 * return None * with nogil: * nread = c_pread(fd, &si, 56, pointer) # <<<<<<<<<<<<<< @@ -25120,7 +25120,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_si), 56, __pyx_v_pointer); } - /* "dataRead.pyx":302 + /* "dataRead.pyx":364 * if pointer == 0: * return None * with nogil: # <<<<<<<<<<<<<< @@ -25139,7 +25139,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ } } - /* "dataRead.pyx":304 + /* "dataRead.pyx":366 * with nogil: * nread = c_pread(fd, &si, 56, pointer) * if nread < 56: # <<<<<<<<<<<<<< @@ -25149,7 +25149,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ __pyx_t_1 = (__pyx_v_nread < 56); if (__pyx_t_1) { - /* "dataRead.pyx":305 + /* "dataRead.pyx":367 * nread = c_pread(fd, &si, 56, pointer) * if nread < 56: * return None # <<<<<<<<<<<<<< @@ -25160,7 +25160,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "dataRead.pyx":304 + /* "dataRead.pyx":366 * with nogil: * nread = c_pread(fd, &si, 56, pointer) * if nread < 56: # <<<<<<<<<<<<<< @@ -25169,90 +25169,90 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ */ } - /* "dataRead.pyx":307 + /* "dataRead.pyx":369 * return None * result = { * 'id': b'##SI', # <<<<<<<<<<<<<< * 'length': si.length, * 'link_count': si.link_count, */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_id, __pyx_kp_b_SI) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_id, __pyx_kp_b_SI) < 0) __PYX_ERR(0, 369, __pyx_L1_error) - /* "dataRead.pyx":308 + /* "dataRead.pyx":370 * result = { * 'id': b'##SI', * 'length': si.length, # <<<<<<<<<<<<<< * 'link_count': si.link_count, * 'si_tx_name': si.si_tx_name, */ - __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.length); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 308, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.length); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 370, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_length, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_length, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":309 + /* "dataRead.pyx":371 * 'id': b'##SI', * 'length': si.length, * 'link_count': si.link_count, # <<<<<<<<<<<<<< * 'si_tx_name': si.si_tx_name, * 'si_tx_path': si.si_tx_path, */ - __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.link_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 309, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.link_count); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 371, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_link_count, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_link_count, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":310 + /* "dataRead.pyx":372 * 'length': si.length, * 'link_count': si.link_count, * 'si_tx_name': si.si_tx_name, # <<<<<<<<<<<<<< * 'si_tx_path': si.si_tx_path, * 'si_md_comment': si.si_md_comment, */ - __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_tx_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 310, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_tx_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 372, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_tx_name, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_tx_name, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":311 + /* "dataRead.pyx":373 * 'link_count': si.link_count, * 'si_tx_name': si.si_tx_name, * 'si_tx_path': si.si_tx_path, # <<<<<<<<<<<<<< * 'si_md_comment': si.si_md_comment, * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), */ - __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_tx_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 311, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_tx_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_tx_path, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_tx_path, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":312 + /* "dataRead.pyx":374 * 'si_tx_name': si.si_tx_name, * 'si_tx_path': si.si_tx_path, * 'si_md_comment': si.si_md_comment, # <<<<<<<<<<<<<< * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), */ - __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_md_comment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 312, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_uint64_t(__pyx_v_si.si_md_comment); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_md_comment, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_md_comment, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":313 + /* "dataRead.pyx":375 * 'si_tx_path': si.si_tx_path, * 'si_md_comment': si.si_md_comment, * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), # <<<<<<<<<<<<<< * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), * 'si_flags': si.si_flags, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_SI_TYPE_MAP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_SI_TYPE_MAP); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 313, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 313, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_6 = NULL; __pyx_t_7 = 0; @@ -25273,26 +25273,26 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 313, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 375, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_type, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_type, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":314 + /* "dataRead.pyx":376 * 'si_md_comment': si.si_md_comment, * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), # <<<<<<<<<<<<<< * 'si_flags': si.si_flags, * 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, */ - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_SI_BUS_MAP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 314, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_SI_BUS_MAP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 314, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_bus_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 314, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_bus_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; __pyx_t_7 = 0; @@ -25313,60 +25313,60 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_7, 2+__pyx_t_7); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 314, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 376, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_bus_type, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_bus_type, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":315 + /* "dataRead.pyx":377 * 'si_type': _SI_TYPE_MAP.get(si.si_type, 'OTHER'), * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), * 'si_flags': si.si_flags, # <<<<<<<<<<<<<< * 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, * 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, */ - __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 315, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_si.si_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 377, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_flags, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_si_flags, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":316 + /* "dataRead.pyx":378 * 'si_bus_type': _SI_BUS_MAP.get(si.si_bus_type, 'NONE'), * 'si_flags': si.si_flags, * 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, # <<<<<<<<<<<<<< * 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, * } */ - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 316, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_si.si_tx_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 316, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_si.si_tx_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_Comment, __pyx_t_4) < 0) __PYX_ERR(0, 316, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_Comment, __pyx_t_4) < 0) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_source_name, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_source_name, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":317 + /* "dataRead.pyx":379 * 'si_flags': si.si_flags, * 'source_name': {'Comment': _fast_read_tx(fd, si.si_tx_name)}, * 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, # <<<<<<<<<<<<<< * } * return result */ - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 317, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_si.si_tx_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 317, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_si.si_tx_path); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_Comment, __pyx_t_4) < 0) __PYX_ERR(0, 317, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_u_Comment, __pyx_t_4) < 0) __PYX_ERR(0, 379, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_source_path, __pyx_t_3) < 0) __PYX_ERR(0, 307, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_u_source_path, __pyx_t_3) < 0) __PYX_ERR(0, 369, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_result = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":319 + /* "dataRead.pyx":381 * 'source_path': {'Comment': _fast_read_tx(fd, si.si_tx_path)}, * } * return result # <<<<<<<<<<<<<< @@ -25378,11 +25378,11 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ __pyx_r = __pyx_v_result; goto __pyx_L0; - /* "dataRead.pyx":291 + /* "dataRead.pyx":346 * * * cdef dict _fast_read_si(int fd, uint64_t pointer): # <<<<<<<<<<<<<< - * """Read SI block and return a dict matching the SIBlock format. + * """Read an SI block and return a dict matching the ``SIBlock`` Python format. * */ @@ -25402,7 +25402,7 @@ static PyObject *__pyx_f_8dataRead__fast_read_si(int __pyx_v_fd, uint64_t __pyx_ return __pyx_r; } -/* "dataRead.pyx":322 +/* "dataRead.pyx":384 * * * def read_cn_chain_fast(object fid, uint64_t first_pointer, # <<<<<<<<<<<<<< @@ -25476,7 +25476,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 384, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -25484,9 +25484,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 384, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 1); __PYX_ERR(0, 322, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 1); __PYX_ERR(0, 384, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -25494,9 +25494,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 384, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 2); __PYX_ERR(0, 322, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 2); __PYX_ERR(0, 384, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: @@ -25504,9 +25504,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 384, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 3); __PYX_ERR(0, 322, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 3); __PYX_ERR(0, 384, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: @@ -25514,14 +25514,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 384, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 4); __PYX_ERR(0, 322, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, 4); __PYX_ERR(0, 384, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "read_cn_chain_fast") < 0)) __PYX_ERR(0, 322, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "read_cn_chain_fast") < 0)) __PYX_ERR(0, 384, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 5)) { goto __pyx_L5_argtuple_error; @@ -25533,14 +25533,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); } __pyx_v_fid = values[0]; - __pyx_v_first_pointer = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_first_pointer == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 322, __pyx_L3_error) + __pyx_v_first_pointer = __Pyx_PyInt_As_uint64_t(values[1]); if (unlikely((__pyx_v_first_pointer == ((uint64_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 384, __pyx_L3_error) __pyx_v_si_cache = ((PyObject*)values[2]); - __pyx_v_minimal = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_minimal == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 323, __pyx_L3_error) - __pyx_v_channel_name_list = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_channel_name_list == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 323, __pyx_L3_error) + __pyx_v_minimal = __Pyx_PyInt_As_int(values[3]); if (unlikely((__pyx_v_minimal == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 385, __pyx_L3_error) + __pyx_v_channel_name_list = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_channel_name_list == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 385, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 322, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("read_cn_chain_fast", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 384, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -25554,7 +25554,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_si_cache), (&PyDict_Type), 1, "si_cache", 1))) __PYX_ERR(0, 323, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_si_cache), (&PyDict_Type), 1, "si_cache", 1))) __PYX_ERR(0, 385, __pyx_L1_error) __pyx_r = __pyx_pf_8dataRead_read_cn_chain_fast(__pyx_self, __pyx_v_fid, __pyx_v_first_pointer, __pyx_v_si_cache, __pyx_v_minimal, __pyx_v_channel_name_list); /* function exit code */ @@ -25633,14 +25633,14 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("read_cn_chain_fast", 1); - /* "dataRead.pyx":345 + /* "dataRead.pyx":407 * cc_dict has '_needs_completion'=True for cc_type 3/7-11 * """ * cdef int fd = fid.fileno() # <<<<<<<<<<<<<< * cdef uint64_t pointer = first_pointer * cdef _CNFixedHdr cn_hdr */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_fid, __pyx_n_s_fileno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_fid, __pyx_n_s_fileno); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; __pyx_t_4 = 0; @@ -25660,15 +25660,15 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 0+__pyx_t_4); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 345, __pyx_L1_error) + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 345, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_fd = __pyx_t_5; - /* "dataRead.pyx":346 + /* "dataRead.pyx":408 * """ * cdef int fd = fid.fileno() * cdef uint64_t pointer = first_pointer # <<<<<<<<<<<<<< @@ -25677,19 +25677,19 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_pointer = __pyx_v_first_pointer; - /* "dataRead.pyx":355 + /* "dataRead.pyx":417 * cdef int64_t cn_key_neg * cdef object cn_key * cdef list results = [] # <<<<<<<<<<<<<< * cdef dict cn_dict, cc_dict, si_dict * cdef str cn_name, unit_str, desc_str */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 355, __pyx_L1_error) + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_results = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":364 + /* "dataRead.pyx":426 * cdef uint32_t i * * while pointer != 0: # <<<<<<<<<<<<<< @@ -25700,7 +25700,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_pointer != 0); if (!__pyx_t_6) break; - /* "dataRead.pyx":366 + /* "dataRead.pyx":428 * while pointer != 0: * # Read CN fixed header + 8 standard links (88 bytes) * with nogil: # <<<<<<<<<<<<<< @@ -25716,7 +25716,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ #endif /*try:*/ { - /* "dataRead.pyx":367 + /* "dataRead.pyx":429 * # Read CN fixed header + 8 standard links (88 bytes) * with nogil: * nread = c_pread(fd, &cn_hdr, 88, pointer) # <<<<<<<<<<<<<< @@ -25726,7 +25726,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_cn_hdr), 88, __pyx_v_pointer); } - /* "dataRead.pyx":366 + /* "dataRead.pyx":428 * while pointer != 0: * # Read CN fixed header + 8 standard links (88 bytes) * with nogil: # <<<<<<<<<<<<<< @@ -25745,7 +25745,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } } - /* "dataRead.pyx":368 + /* "dataRead.pyx":430 * with nogil: * nread = c_pread(fd, &cn_hdr, 88, pointer) * if nread < 88: # <<<<<<<<<<<<<< @@ -25755,7 +25755,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_nread < 88); if (__pyx_t_6) { - /* "dataRead.pyx":369 + /* "dataRead.pyx":431 * nread = c_pread(fd, &cn_hdr, 88, pointer) * if nread < 88: * break # <<<<<<<<<<<<<< @@ -25764,7 +25764,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ goto __pyx_L4_break; - /* "dataRead.pyx":368 + /* "dataRead.pyx":430 * with nogil: * nread = c_pread(fd, &cn_hdr, 88, pointer) * if nread < 88: # <<<<<<<<<<<<<< @@ -25773,7 +25773,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":372 + /* "dataRead.pyx":434 * * # Read CN data section (72 bytes at variable offset) * data_offset = 24 + (cn_hdr.link_count) * 8 # <<<<<<<<<<<<<< @@ -25782,7 +25782,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_data_offset = (24 + (((Py_ssize_t)__pyx_v_cn_hdr.link_count) * 8)); - /* "dataRead.pyx":373 + /* "dataRead.pyx":435 * # Read CN data section (72 bytes at variable offset) * data_offset = 24 + (cn_hdr.link_count) * 8 * with nogil: # <<<<<<<<<<<<<< @@ -25798,7 +25798,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ #endif /*try:*/ { - /* "dataRead.pyx":374 + /* "dataRead.pyx":436 * data_offset = 24 + (cn_hdr.link_count) * 8 * with nogil: * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) # <<<<<<<<<<<<<< @@ -25808,7 +25808,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_cn_dat), 72, (__pyx_v_pointer + __pyx_v_data_offset)); } - /* "dataRead.pyx":373 + /* "dataRead.pyx":435 * # Read CN data section (72 bytes at variable offset) * data_offset = 24 + (cn_hdr.link_count) * 8 * with nogil: # <<<<<<<<<<<<<< @@ -25827,7 +25827,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } } - /* "dataRead.pyx":375 + /* "dataRead.pyx":437 * with nogil: * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) * if nread < 72: # <<<<<<<<<<<<<< @@ -25837,7 +25837,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_nread < 72); if (__pyx_t_6) { - /* "dataRead.pyx":376 + /* "dataRead.pyx":438 * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) * if nread < 72: * break # <<<<<<<<<<<<<< @@ -25846,7 +25846,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ goto __pyx_L4_break; - /* "dataRead.pyx":375 + /* "dataRead.pyx":437 * with nogil: * nread = c_pread(fd, &cn_dat, 72, pointer + data_offset) * if nread < 72: # <<<<<<<<<<<<<< @@ -25855,7 +25855,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":379 + /* "dataRead.pyx":441 * * # Compute dict key * if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE # <<<<<<<<<<<<<< @@ -25865,7 +25865,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = ((__pyx_v_cn_dat.cn_flags & 0x20000) != 0); if (__pyx_t_6) { - /* "dataRead.pyx":380 + /* "dataRead.pyx":442 * # Compute dict key * if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE * cn_key_neg = -pointer # <<<<<<<<<<<<<< @@ -25874,19 +25874,19 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_cn_key_neg = (-((int64_t)__pyx_v_pointer)); - /* "dataRead.pyx":381 + /* "dataRead.pyx":443 * if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE * cn_key_neg = -pointer * cn_key = cn_key_neg # <<<<<<<<<<<<<< * else: * cn_key_uint = (cn_dat.cn_byte_offset) * 8 + cn_dat.cn_bit_offset */ - __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_cn_key_neg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 381, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_int64_t(__pyx_v_cn_key_neg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_cn_key, __pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":379 + /* "dataRead.pyx":441 * * # Compute dict key * if cn_dat.cn_flags & 0x20000: # CN_F_DATA_STREAM_MODE # <<<<<<<<<<<<<< @@ -25896,7 +25896,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ goto __pyx_L17; } - /* "dataRead.pyx":383 + /* "dataRead.pyx":445 * cn_key = cn_key_neg * else: * cn_key_uint = (cn_dat.cn_byte_offset) * 8 + cn_dat.cn_bit_offset # <<<<<<<<<<<<<< @@ -25906,21 +25906,21 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ /*else*/ { __pyx_v_cn_key_uint = ((((uint64_t)__pyx_v_cn_dat.cn_byte_offset) * 8) + __pyx_v_cn_dat.cn_bit_offset); - /* "dataRead.pyx":384 + /* "dataRead.pyx":446 * else: * cn_key_uint = (cn_dat.cn_byte_offset) * 8 + cn_dat.cn_bit_offset * cn_key = cn_key_uint # <<<<<<<<<<<<<< * * # Read channel name (TX block) */ - __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_key_uint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 384, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_key_uint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 446, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_cn_key, __pyx_t_1); __pyx_t_1 = 0; } __pyx_L17:; - /* "dataRead.pyx":387 + /* "dataRead.pyx":449 * * # Read channel name (TX block) * cn_name = _fast_read_tx(fd, cn_hdr.cn_tx_name) if cn_hdr.cn_tx_name else '' # <<<<<<<<<<<<<< @@ -25929,7 +25929,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_t_6 = (__pyx_v_cn_hdr.cn_tx_name != 0); if (__pyx_t_6) { - __pyx_t_2 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_cn_hdr.cn_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error) + __pyx_t_2 = __pyx_f_8dataRead__fast_read_tx(__pyx_v_fd, __pyx_v_cn_hdr.cn_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 449, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __pyx_t_2; __pyx_t_2 = 0; @@ -25940,307 +25940,307 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __Pyx_XDECREF_SET(__pyx_v_cn_name, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; - /* "dataRead.pyx":391 + /* "dataRead.pyx":453 * # Build CN dict * cn_dict = { * 'pointer': pointer, # <<<<<<<<<<<<<< * 'id': b'##CN', * 'length': cn_hdr.length, */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(27); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(27); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_pointer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 391, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_pointer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_pointer, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_pointer, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_id, __pyx_kp_b_CN) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_id, __pyx_kp_b_CN) < 0) __PYX_ERR(0, 453, __pyx_L1_error) - /* "dataRead.pyx":393 + /* "dataRead.pyx":455 * 'pointer': pointer, * 'id': b'##CN', * 'length': cn_hdr.length, # <<<<<<<<<<<<<< * 'link_count': cn_hdr.link_count, * 'cn_cn_next': cn_hdr.cn_cn_next, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.length); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.length); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 455, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_length, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_length, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":394 + /* "dataRead.pyx":456 * 'id': b'##CN', * 'length': cn_hdr.length, * 'link_count': cn_hdr.link_count, # <<<<<<<<<<<<<< * 'cn_cn_next': cn_hdr.cn_cn_next, * 'cn_composition': cn_hdr.cn_composition, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.link_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.link_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 456, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_link_count, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_link_count, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":395 + /* "dataRead.pyx":457 * 'length': cn_hdr.length, * 'link_count': cn_hdr.link_count, * 'cn_cn_next': cn_hdr.cn_cn_next, # <<<<<<<<<<<<<< * 'cn_composition': cn_hdr.cn_composition, * 'cn_tx_name': cn_hdr.cn_tx_name, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_cn_next); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_cn_next); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 457, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_cn_next, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_cn_next, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":396 + /* "dataRead.pyx":458 * 'link_count': cn_hdr.link_count, * 'cn_cn_next': cn_hdr.cn_cn_next, * 'cn_composition': cn_hdr.cn_composition, # <<<<<<<<<<<<<< * 'cn_tx_name': cn_hdr.cn_tx_name, * 'cn_si_source': cn_hdr.cn_si_source, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_composition); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 396, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_composition); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 458, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_composition, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_composition, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":397 + /* "dataRead.pyx":459 * 'cn_cn_next': cn_hdr.cn_cn_next, * 'cn_composition': cn_hdr.cn_composition, * 'cn_tx_name': cn_hdr.cn_tx_name, # <<<<<<<<<<<<<< * 'cn_si_source': cn_hdr.cn_si_source, * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 459, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_tx_name, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_tx_name, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":398 + /* "dataRead.pyx":460 * 'cn_composition': cn_hdr.cn_composition, * 'cn_tx_name': cn_hdr.cn_tx_name, * 'cn_si_source': cn_hdr.cn_si_source, # <<<<<<<<<<<<<< * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, * 'cn_data': cn_hdr.cn_data, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_si_source); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 398, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_si_source); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_si_source, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_si_source, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":399 + /* "dataRead.pyx":461 * 'cn_tx_name': cn_hdr.cn_tx_name, * 'cn_si_source': cn_hdr.cn_si_source, * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, # <<<<<<<<<<<<<< * 'cn_data': cn_hdr.cn_data, * 'cn_md_unit': cn_hdr.cn_md_unit, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_cc_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 399, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_cc_conversion); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 461, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_cc_conversion, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_cc_conversion, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":400 + /* "dataRead.pyx":462 * 'cn_si_source': cn_hdr.cn_si_source, * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, * 'cn_data': cn_hdr.cn_data, # <<<<<<<<<<<<<< * 'cn_md_unit': cn_hdr.cn_md_unit, * 'cn_md_comment': cn_hdr.cn_md_comment, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 400, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_data); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 462, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_data, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_data, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":401 + /* "dataRead.pyx":463 * 'cn_cc_conversion': cn_hdr.cn_cc_conversion, * 'cn_data': cn_hdr.cn_data, * 'cn_md_unit': cn_hdr.cn_md_unit, # <<<<<<<<<<<<<< * 'cn_md_comment': cn_hdr.cn_md_comment, * 'cn_type': cn_dat.cn_type, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_md_unit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 401, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_md_unit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 463, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_md_unit, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_md_unit, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":402 + /* "dataRead.pyx":464 * 'cn_data': cn_hdr.cn_data, * 'cn_md_unit': cn_hdr.cn_md_unit, * 'cn_md_comment': cn_hdr.cn_md_comment, # <<<<<<<<<<<<<< * 'cn_type': cn_dat.cn_type, * 'cn_sync_type': cn_dat.cn_sync_type, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_md_comment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 402, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cn_hdr.cn_md_comment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 464, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_md_comment, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_md_comment, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":403 + /* "dataRead.pyx":465 * 'cn_md_unit': cn_hdr.cn_md_unit, * 'cn_md_comment': cn_hdr.cn_md_comment, * 'cn_type': cn_dat.cn_type, # <<<<<<<<<<<<<< * 'cn_sync_type': cn_dat.cn_sync_type, * 'cn_data_type': cn_dat.cn_data_type, */ - __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 403, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 465, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_type, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_type, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":404 + /* "dataRead.pyx":466 * 'cn_md_comment': cn_hdr.cn_md_comment, * 'cn_type': cn_dat.cn_type, * 'cn_sync_type': cn_dat.cn_sync_type, # <<<<<<<<<<<<<< * 'cn_data_type': cn_dat.cn_data_type, * 'cn_bit_offset': cn_dat.cn_bit_offset, */ - __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_sync_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 404, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_sync_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 466, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_sync_type, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_sync_type, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":405 + /* "dataRead.pyx":467 * 'cn_type': cn_dat.cn_type, * 'cn_sync_type': cn_dat.cn_sync_type, * 'cn_data_type': cn_dat.cn_data_type, # <<<<<<<<<<<<<< * 'cn_bit_offset': cn_dat.cn_bit_offset, * 'cn_byte_offset': cn_dat.cn_byte_offset, */ - __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_data_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_data_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_data_type, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_data_type, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":406 + /* "dataRead.pyx":468 * 'cn_sync_type': cn_dat.cn_sync_type, * 'cn_data_type': cn_dat.cn_data_type, * 'cn_bit_offset': cn_dat.cn_bit_offset, # <<<<<<<<<<<<<< * 'cn_byte_offset': cn_dat.cn_byte_offset, * 'cn_bit_count': cn_dat.cn_bit_count, */ - __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_bit_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 406, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_bit_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 468, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_bit_offset, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_bit_offset, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":407 + /* "dataRead.pyx":469 * 'cn_data_type': cn_dat.cn_data_type, * 'cn_bit_offset': cn_dat.cn_bit_offset, * 'cn_byte_offset': cn_dat.cn_byte_offset, # <<<<<<<<<<<<<< * 'cn_bit_count': cn_dat.cn_bit_count, * 'cn_flags': cn_dat.cn_flags, */ - __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_byte_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 407, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_byte_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 469, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_byte_offset, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_byte_offset, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":408 + /* "dataRead.pyx":470 * 'cn_bit_offset': cn_dat.cn_bit_offset, * 'cn_byte_offset': cn_dat.cn_byte_offset, * 'cn_bit_count': cn_dat.cn_bit_count, # <<<<<<<<<<<<<< * 'cn_flags': cn_dat.cn_flags, * 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, */ - __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_bit_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 408, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_bit_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 470, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_bit_count, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_bit_count, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":409 + /* "dataRead.pyx":471 * 'cn_byte_offset': cn_dat.cn_byte_offset, * 'cn_bit_count': cn_dat.cn_bit_count, * 'cn_flags': cn_dat.cn_flags, # <<<<<<<<<<<<<< * 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, * 'cn_precision': cn_dat.cn_precision, */ - __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 409, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 471, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_flags, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_flags, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":410 + /* "dataRead.pyx":472 * 'cn_bit_count': cn_dat.cn_bit_count, * 'cn_flags': cn_dat.cn_flags, * 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, # <<<<<<<<<<<<<< * 'cn_precision': cn_dat.cn_precision, * 'cn_reserved': 0, */ - __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_invalid_bit_pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 410, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_cn_dat.cn_invalid_bit_pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 472, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_invalid_bit_pos, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_invalid_bit_pos, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":411 + /* "dataRead.pyx":473 * 'cn_flags': cn_dat.cn_flags, * 'cn_invalid_bit_pos': cn_dat.cn_invalid_bit_pos, * 'cn_precision': cn_dat.cn_precision, # <<<<<<<<<<<<<< * 'cn_reserved': 0, * 'cn_attachment_count': cn_dat.cn_attachment_count, */ - __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_precision); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 411, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cn_dat.cn_precision); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 473, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_precision, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_precision, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_reserved, __pyx_int_0) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_reserved, __pyx_int_0) < 0) __PYX_ERR(0, 453, __pyx_L1_error) - /* "dataRead.pyx":413 + /* "dataRead.pyx":475 * 'cn_precision': cn_dat.cn_precision, * 'cn_reserved': 0, * 'cn_attachment_count': cn_dat.cn_attachment_count, # <<<<<<<<<<<<<< * 'cn_val_range_min': cn_dat.cn_val_range_min, * 'cn_val_range_max': cn_dat.cn_val_range_max, */ - __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cn_dat.cn_attachment_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 413, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cn_dat.cn_attachment_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_attachment_count, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_attachment_count, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":414 + /* "dataRead.pyx":476 * 'cn_reserved': 0, * 'cn_attachment_count': cn_dat.cn_attachment_count, * 'cn_val_range_min': cn_dat.cn_val_range_min, # <<<<<<<<<<<<<< * 'cn_val_range_max': cn_dat.cn_val_range_max, * 'cn_default_x': None, */ - __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cn_dat.cn_val_range_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 414, __pyx_L1_error) + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cn_dat.cn_val_range_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 476, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_val_range_min, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_val_range_min, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":415 + /* "dataRead.pyx":477 * 'cn_attachment_count': cn_dat.cn_attachment_count, * 'cn_val_range_min': cn_dat.cn_val_range_min, * 'cn_val_range_max': cn_dat.cn_val_range_max, # <<<<<<<<<<<<<< * 'cn_default_x': None, * 'name': cn_name, */ - __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cn_dat.cn_val_range_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error) + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cn_dat.cn_val_range_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 477, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_val_range_max, __pyx_t_2) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_val_range_max, __pyx_t_2) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":416 + /* "dataRead.pyx":478 * 'cn_val_range_min': cn_dat.cn_val_range_min, * 'cn_val_range_max': cn_dat.cn_val_range_max, * 'cn_default_x': None, # <<<<<<<<<<<<<< * 'name': cn_name, * } */ - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_default_x, Py_None) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cn_default_x, Py_None) < 0) __PYX_ERR(0, 453, __pyx_L1_error) - /* "dataRead.pyx":417 + /* "dataRead.pyx":479 * 'cn_val_range_max': cn_dat.cn_val_range_max, * 'cn_default_x': None, * 'name': cn_name, # <<<<<<<<<<<<<< * } * */ - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_name, __pyx_v_cn_name) < 0) __PYX_ERR(0, 391, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_name, __pyx_v_cn_name) < 0) __PYX_ERR(0, 453, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_cn_dict, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; - /* "dataRead.pyx":421 + /* "dataRead.pyx":483 * * # Handle extra links (attachments, default_x) * if cn_hdr.link_count > 8: # <<<<<<<<<<<<<< @@ -26250,7 +26250,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_hdr.link_count > 8); if (__pyx_t_6) { - /* "dataRead.pyx":422 + /* "dataRead.pyx":484 * # Handle extra links (attachments, default_x) * if cn_hdr.link_count > 8: * n_extra = ((cn_hdr.link_count) - 8) * 8 # <<<<<<<<<<<<<< @@ -26259,7 +26259,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_n_extra = ((((Py_ssize_t)__pyx_v_cn_hdr.link_count) - 8) * 8); - /* "dataRead.pyx":423 + /* "dataRead.pyx":485 * if cn_hdr.link_count > 8: * n_extra = ((cn_hdr.link_count) - 8) * 8 * if n_extra <= 512: # <<<<<<<<<<<<<< @@ -26269,7 +26269,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_n_extra <= 0x200); if (__pyx_t_6) { - /* "dataRead.pyx":424 + /* "dataRead.pyx":486 * n_extra = ((cn_hdr.link_count) - 8) * 8 * if n_extra <= 512: * with nogil: # <<<<<<<<<<<<<< @@ -26285,7 +26285,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ #endif /*try:*/ { - /* "dataRead.pyx":425 + /* "dataRead.pyx":487 * if n_extra <= 512: * with nogil: * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) # <<<<<<<<<<<<<< @@ -26295,7 +26295,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_v_nread = pread(__pyx_v_fd, __pyx_v_extra_buf, __pyx_v_n_extra, (__pyx_v_pointer + 88)); } - /* "dataRead.pyx":424 + /* "dataRead.pyx":486 * n_extra = ((cn_hdr.link_count) - 8) * 8 * if n_extra <= 512: * with nogil: # <<<<<<<<<<<<<< @@ -26314,7 +26314,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } } - /* "dataRead.pyx":426 + /* "dataRead.pyx":488 * with nogil: * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) * if nread == n_extra: # <<<<<<<<<<<<<< @@ -26324,19 +26324,19 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_nread == __pyx_v_n_extra); if (__pyx_t_6) { - /* "dataRead.pyx":427 + /* "dataRead.pyx":489 * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) * if nread == n_extra: * extra_links = [] # <<<<<<<<<<<<<< * for i in range(0, n_extra, 8): * lnk = 0 */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L1_error) + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 489, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_extra_links, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; - /* "dataRead.pyx":428 + /* "dataRead.pyx":490 * if nread == n_extra: * extra_links = [] * for i in range(0, n_extra, 8): # <<<<<<<<<<<<<< @@ -26348,7 +26348,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=8) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":429 + /* "dataRead.pyx":491 * extra_links = [] * for i in range(0, n_extra, 8): * lnk = 0 # <<<<<<<<<<<<<< @@ -26357,7 +26357,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_lnk = 0; - /* "dataRead.pyx":430 + /* "dataRead.pyx":492 * for i in range(0, n_extra, 8): * lnk = 0 * memcpy(&lnk, extra_buf + i, 8) # <<<<<<<<<<<<<< @@ -26366,20 +26366,20 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ (void)(memcpy((&__pyx_v_lnk), (__pyx_v_extra_buf + __pyx_v_i), 8)); - /* "dataRead.pyx":431 + /* "dataRead.pyx":493 * lnk = 0 * memcpy(&lnk, extra_buf + i, 8) * extra_links.append(lnk) # <<<<<<<<<<<<<< * if cn_dat.cn_attachment_count > 0: * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] */ - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_lnk); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 431, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v_lnk); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_extra_links, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 431, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_extra_links, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 493, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - /* "dataRead.pyx":432 + /* "dataRead.pyx":494 * memcpy(&lnk, extra_buf + i, 8) * extra_links.append(lnk) * if cn_dat.cn_attachment_count > 0: # <<<<<<<<<<<<<< @@ -26389,19 +26389,19 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_dat.cn_attachment_count > 0); if (__pyx_t_6) { - /* "dataRead.pyx":433 + /* "dataRead.pyx":495 * extra_links.append(lnk) * if cn_dat.cn_attachment_count > 0: * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] # <<<<<<<<<<<<<< * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: * cn_dict['cn_default_x'] = extra_links[cn_dat.cn_attachment_count:] */ - __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_extra_links, 0, __pyx_v_cn_dat.cn_attachment_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 433, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_extra_links, 0, __pyx_v_cn_dat.cn_attachment_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_cn_at_reference, __pyx_t_1) < 0))) __PYX_ERR(0, 433, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_cn_at_reference, __pyx_t_1) < 0))) __PYX_ERR(0, 495, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":432 + /* "dataRead.pyx":494 * memcpy(&lnk, extra_buf + i, 8) * extra_links.append(lnk) * if cn_dat.cn_attachment_count > 0: # <<<<<<<<<<<<<< @@ -26410,7 +26410,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":434 + /* "dataRead.pyx":496 * if cn_dat.cn_attachment_count > 0: * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: # <<<<<<<<<<<<<< @@ -26420,19 +26420,19 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_hdr.link_count > (8 + __pyx_v_cn_dat.cn_attachment_count)); if (__pyx_t_6) { - /* "dataRead.pyx":435 + /* "dataRead.pyx":497 * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: * cn_dict['cn_default_x'] = extra_links[cn_dat.cn_attachment_count:] # <<<<<<<<<<<<<< * * # Read unit (TX or MD block) */ - __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_extra_links, __pyx_v_cn_dat.cn_attachment_count, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 435, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyList_GetSlice(__pyx_v_extra_links, __pyx_v_cn_dat.cn_attachment_count, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_cn_default_x, __pyx_t_1) < 0))) __PYX_ERR(0, 435, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_cn_default_x, __pyx_t_1) < 0))) __PYX_ERR(0, 497, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":434 + /* "dataRead.pyx":496 * if cn_dat.cn_attachment_count > 0: * cn_dict['cn_at_reference'] = extra_links[:cn_dat.cn_attachment_count] * if cn_hdr.link_count > 8 + cn_dat.cn_attachment_count: # <<<<<<<<<<<<<< @@ -26441,7 +26441,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":426 + /* "dataRead.pyx":488 * with nogil: * nread = c_pread(fd, extra_buf, n_extra, pointer + 88) * if nread == n_extra: # <<<<<<<<<<<<<< @@ -26450,7 +26450,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":423 + /* "dataRead.pyx":485 * if cn_hdr.link_count > 8: * n_extra = ((cn_hdr.link_count) - 8) * 8 * if n_extra <= 512: # <<<<<<<<<<<<<< @@ -26459,7 +26459,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":421 + /* "dataRead.pyx":483 * * # Handle extra links (attachments, default_x) * if cn_hdr.link_count > 8: # <<<<<<<<<<<<<< @@ -26468,7 +26468,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":438 + /* "dataRead.pyx":500 * * # Read unit (TX or MD block) * if not channel_name_list: # <<<<<<<<<<<<<< @@ -26478,7 +26478,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (!__pyx_v_channel_name_list); if (__pyx_t_6) { - /* "dataRead.pyx":439 + /* "dataRead.pyx":501 * # Read unit (TX or MD block) * if not channel_name_list: * if cn_hdr.cn_md_unit: # <<<<<<<<<<<<<< @@ -26488,19 +26488,19 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_hdr.cn_md_unit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":440 + /* "dataRead.pyx":502 * if not channel_name_list: * if cn_hdr.cn_md_unit: * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) # <<<<<<<<<<<<<< * if unit_str: * cn_dict['unit'] = unit_str */ - __pyx_t_1 = __pyx_f_8dataRead__fast_read_tx_or_md(__pyx_v_fd, __pyx_v_cn_hdr.cn_md_unit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 440, __pyx_L1_error) + __pyx_t_1 = __pyx_f_8dataRead__fast_read_tx_or_md(__pyx_v_fd, __pyx_v_cn_hdr.cn_md_unit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_unit_str, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; - /* "dataRead.pyx":441 + /* "dataRead.pyx":503 * if cn_hdr.cn_md_unit: * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) * if unit_str: # <<<<<<<<<<<<<< @@ -26510,16 +26510,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_unit_str != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_unit_str) != 0); if (__pyx_t_6) { - /* "dataRead.pyx":442 + /* "dataRead.pyx":504 * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) * if unit_str: * cn_dict['unit'] = unit_str # <<<<<<<<<<<<<< * elif cn_dat.cn_sync_type == 1: * cn_dict['unit'] = 's' */ - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_v_unit_str) < 0))) __PYX_ERR(0, 442, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_v_unit_str) < 0))) __PYX_ERR(0, 504, __pyx_L1_error) - /* "dataRead.pyx":441 + /* "dataRead.pyx":503 * if cn_hdr.cn_md_unit: * unit_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_unit) * if unit_str: # <<<<<<<<<<<<<< @@ -26529,7 +26529,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ goto __pyx_L32; } - /* "dataRead.pyx":443 + /* "dataRead.pyx":505 * if unit_str: * cn_dict['unit'] = unit_str * elif cn_dat.cn_sync_type == 1: # <<<<<<<<<<<<<< @@ -26539,16 +26539,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 1); if (__pyx_t_6) { - /* "dataRead.pyx":444 + /* "dataRead.pyx":506 * cn_dict['unit'] = unit_str * elif cn_dat.cn_sync_type == 1: * cn_dict['unit'] = 's' # <<<<<<<<<<<<<< * elif cn_dat.cn_sync_type == 2: * cn_dict['unit'] = 'rad' */ - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_s) < 0))) __PYX_ERR(0, 444, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_s) < 0))) __PYX_ERR(0, 506, __pyx_L1_error) - /* "dataRead.pyx":443 + /* "dataRead.pyx":505 * if unit_str: * cn_dict['unit'] = unit_str * elif cn_dat.cn_sync_type == 1: # <<<<<<<<<<<<<< @@ -26558,7 +26558,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ goto __pyx_L32; } - /* "dataRead.pyx":445 + /* "dataRead.pyx":507 * elif cn_dat.cn_sync_type == 1: * cn_dict['unit'] = 's' * elif cn_dat.cn_sync_type == 2: # <<<<<<<<<<<<<< @@ -26568,16 +26568,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 2); if (__pyx_t_6) { - /* "dataRead.pyx":446 + /* "dataRead.pyx":508 * cn_dict['unit'] = 's' * elif cn_dat.cn_sync_type == 2: * cn_dict['unit'] = 'rad' # <<<<<<<<<<<<<< * elif cn_dat.cn_sync_type == 3: * cn_dict['unit'] = 'm' */ - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_rad) < 0))) __PYX_ERR(0, 446, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_rad) < 0))) __PYX_ERR(0, 508, __pyx_L1_error) - /* "dataRead.pyx":445 + /* "dataRead.pyx":507 * elif cn_dat.cn_sync_type == 1: * cn_dict['unit'] = 's' * elif cn_dat.cn_sync_type == 2: # <<<<<<<<<<<<<< @@ -26587,7 +26587,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ goto __pyx_L32; } - /* "dataRead.pyx":447 + /* "dataRead.pyx":509 * elif cn_dat.cn_sync_type == 2: * cn_dict['unit'] = 'rad' * elif cn_dat.cn_sync_type == 3: # <<<<<<<<<<<<<< @@ -26597,16 +26597,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 3); if (__pyx_t_6) { - /* "dataRead.pyx":448 + /* "dataRead.pyx":510 * cn_dict['unit'] = 'rad' * elif cn_dat.cn_sync_type == 3: * cn_dict['unit'] = 'm' # <<<<<<<<<<<<<< * elif cn_dat.cn_sync_type == 1: * cn_dict['unit'] = 's' */ - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_m) < 0))) __PYX_ERR(0, 448, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_m) < 0))) __PYX_ERR(0, 510, __pyx_L1_error) - /* "dataRead.pyx":447 + /* "dataRead.pyx":509 * elif cn_dat.cn_sync_type == 2: * cn_dict['unit'] = 'rad' * elif cn_dat.cn_sync_type == 3: # <<<<<<<<<<<<<< @@ -26616,7 +26616,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } __pyx_L32:; - /* "dataRead.pyx":439 + /* "dataRead.pyx":501 * # Read unit (TX or MD block) * if not channel_name_list: * if cn_hdr.cn_md_unit: # <<<<<<<<<<<<<< @@ -26626,7 +26626,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ goto __pyx_L31; } - /* "dataRead.pyx":449 + /* "dataRead.pyx":511 * elif cn_dat.cn_sync_type == 3: * cn_dict['unit'] = 'm' * elif cn_dat.cn_sync_type == 1: # <<<<<<<<<<<<<< @@ -26636,16 +26636,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 1); if (__pyx_t_6) { - /* "dataRead.pyx":450 + /* "dataRead.pyx":512 * cn_dict['unit'] = 'm' * elif cn_dat.cn_sync_type == 1: * cn_dict['unit'] = 's' # <<<<<<<<<<<<<< * elif cn_dat.cn_sync_type == 2: * cn_dict['unit'] = 'rad' */ - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_s) < 0))) __PYX_ERR(0, 450, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_s) < 0))) __PYX_ERR(0, 512, __pyx_L1_error) - /* "dataRead.pyx":449 + /* "dataRead.pyx":511 * elif cn_dat.cn_sync_type == 3: * cn_dict['unit'] = 'm' * elif cn_dat.cn_sync_type == 1: # <<<<<<<<<<<<<< @@ -26655,7 +26655,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ goto __pyx_L31; } - /* "dataRead.pyx":451 + /* "dataRead.pyx":513 * elif cn_dat.cn_sync_type == 1: * cn_dict['unit'] = 's' * elif cn_dat.cn_sync_type == 2: # <<<<<<<<<<<<<< @@ -26665,16 +26665,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 2); if (__pyx_t_6) { - /* "dataRead.pyx":452 + /* "dataRead.pyx":514 * cn_dict['unit'] = 's' * elif cn_dat.cn_sync_type == 2: * cn_dict['unit'] = 'rad' # <<<<<<<<<<<<<< * elif cn_dat.cn_sync_type == 3: * cn_dict['unit'] = 'm' */ - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_rad) < 0))) __PYX_ERR(0, 452, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_rad) < 0))) __PYX_ERR(0, 514, __pyx_L1_error) - /* "dataRead.pyx":451 + /* "dataRead.pyx":513 * elif cn_dat.cn_sync_type == 1: * cn_dict['unit'] = 's' * elif cn_dat.cn_sync_type == 2: # <<<<<<<<<<<<<< @@ -26684,7 +26684,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ goto __pyx_L31; } - /* "dataRead.pyx":453 + /* "dataRead.pyx":515 * elif cn_dat.cn_sync_type == 2: * cn_dict['unit'] = 'rad' * elif cn_dat.cn_sync_type == 3: # <<<<<<<<<<<<<< @@ -26694,16 +26694,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_dat.cn_sync_type == 3); if (__pyx_t_6) { - /* "dataRead.pyx":454 + /* "dataRead.pyx":516 * cn_dict['unit'] = 'rad' * elif cn_dat.cn_sync_type == 3: * cn_dict['unit'] = 'm' # <<<<<<<<<<<<<< * * # Read description (MD/TX block) */ - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_m) < 0))) __PYX_ERR(0, 454, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_unit, __pyx_n_u_m) < 0))) __PYX_ERR(0, 516, __pyx_L1_error) - /* "dataRead.pyx":453 + /* "dataRead.pyx":515 * elif cn_dat.cn_sync_type == 2: * cn_dict['unit'] = 'rad' * elif cn_dat.cn_sync_type == 3: # <<<<<<<<<<<<<< @@ -26713,7 +26713,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } __pyx_L31:; - /* "dataRead.pyx":457 + /* "dataRead.pyx":519 * * # Read description (MD/TX block) * if cn_hdr.cn_md_comment: # <<<<<<<<<<<<<< @@ -26723,19 +26723,19 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cn_hdr.cn_md_comment != 0); if (__pyx_t_6) { - /* "dataRead.pyx":458 + /* "dataRead.pyx":520 * # Read description (MD/TX block) * if cn_hdr.cn_md_comment: * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) # <<<<<<<<<<<<<< * if desc_str: * cn_dict['Comment'] = {'description': desc_str} */ - __pyx_t_1 = __pyx_f_8dataRead__fast_read_tx_or_md(__pyx_v_fd, __pyx_v_cn_hdr.cn_md_comment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 458, __pyx_L1_error) + __pyx_t_1 = __pyx_f_8dataRead__fast_read_tx_or_md(__pyx_v_fd, __pyx_v_cn_hdr.cn_md_comment); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_desc_str, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; - /* "dataRead.pyx":459 + /* "dataRead.pyx":521 * if cn_hdr.cn_md_comment: * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) * if desc_str: # <<<<<<<<<<<<<< @@ -26745,20 +26745,20 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_desc_str != Py_None)&&(__Pyx_PyUnicode_IS_TRUE(__pyx_v_desc_str) != 0); if (__pyx_t_6) { - /* "dataRead.pyx":460 + /* "dataRead.pyx":522 * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) * if desc_str: * cn_dict['Comment'] = {'description': desc_str} # <<<<<<<<<<<<<< * * # Read CC block */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 522, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_description, __pyx_v_desc_str) < 0) __PYX_ERR(0, 460, __pyx_L1_error) - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_Comment, __pyx_t_1) < 0))) __PYX_ERR(0, 460, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_description, __pyx_v_desc_str) < 0) __PYX_ERR(0, 522, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_Comment, __pyx_t_1) < 0))) __PYX_ERR(0, 522, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":459 + /* "dataRead.pyx":521 * if cn_hdr.cn_md_comment: * desc_str = _fast_read_tx_or_md(fd, cn_hdr.cn_md_comment) * if desc_str: # <<<<<<<<<<<<<< @@ -26767,7 +26767,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":457 + /* "dataRead.pyx":519 * * # Read description (MD/TX block) * if cn_hdr.cn_md_comment: # <<<<<<<<<<<<<< @@ -26776,7 +26776,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":438 + /* "dataRead.pyx":500 * * # Read unit (TX or MD block) * if not channel_name_list: # <<<<<<<<<<<<<< @@ -26785,7 +26785,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":463 + /* "dataRead.pyx":525 * * # Read CC block * cc_ptr = cn_hdr.cn_cc_conversion # <<<<<<<<<<<<<< @@ -26795,20 +26795,20 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_11 = __pyx_v_cn_hdr.cn_cc_conversion; __pyx_v_cc_ptr = __pyx_t_11; - /* "dataRead.pyx":464 + /* "dataRead.pyx":526 * # Read CC block * cc_ptr = cn_hdr.cn_cc_conversion * cc_dict = {'cc_type': 0} # <<<<<<<<<<<<<< * if cc_ptr != 0: * with nogil: */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 526, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_type, __pyx_int_0) < 0) __PYX_ERR(0, 464, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_type, __pyx_int_0) < 0) __PYX_ERR(0, 526, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_cc_dict, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; - /* "dataRead.pyx":465 + /* "dataRead.pyx":527 * cc_ptr = cn_hdr.cn_cc_conversion * cc_dict = {'cc_type': 0} * if cc_ptr != 0: # <<<<<<<<<<<<<< @@ -26818,7 +26818,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cc_ptr != 0); if (__pyx_t_6) { - /* "dataRead.pyx":466 + /* "dataRead.pyx":528 * cc_dict = {'cc_type': 0} * if cc_ptr != 0: * with nogil: # <<<<<<<<<<<<<< @@ -26834,7 +26834,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ #endif /*try:*/ { - /* "dataRead.pyx":467 + /* "dataRead.pyx":529 * if cc_ptr != 0: * with nogil: * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) # <<<<<<<<<<<<<< @@ -26844,7 +26844,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_cc_hdr), 56, __pyx_v_cc_ptr); } - /* "dataRead.pyx":466 + /* "dataRead.pyx":528 * cc_dict = {'cc_type': 0} * if cc_ptr != 0: * with nogil: # <<<<<<<<<<<<<< @@ -26863,7 +26863,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } } - /* "dataRead.pyx":468 + /* "dataRead.pyx":530 * with nogil: * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) * if nread == 56: # <<<<<<<<<<<<<< @@ -26873,7 +26873,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_nread == 56); if (__pyx_t_6) { - /* "dataRead.pyx":469 + /* "dataRead.pyx":531 * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) * if nread == 56: * cc_data_offset = 24 + (cc_hdr.link_count) * 8 # <<<<<<<<<<<<<< @@ -26882,7 +26882,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_cc_data_offset = (24 + (((Py_ssize_t)__pyx_v_cc_hdr.link_count) * 8)); - /* "dataRead.pyx":470 + /* "dataRead.pyx":532 * if nread == 56: * cc_data_offset = 24 + (cc_hdr.link_count) * 8 * with nogil: # <<<<<<<<<<<<<< @@ -26898,7 +26898,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ #endif /*try:*/ { - /* "dataRead.pyx":471 + /* "dataRead.pyx":533 * cc_data_offset = 24 + (cc_hdr.link_count) * 8 * with nogil: * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) # <<<<<<<<<<<<<< @@ -26908,7 +26908,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_v_nread = pread(__pyx_v_fd, (&__pyx_v_cc_dat), 24, (__pyx_v_cc_ptr + __pyx_v_cc_data_offset)); } - /* "dataRead.pyx":470 + /* "dataRead.pyx":532 * if nread == 56: * cc_data_offset = 24 + (cc_hdr.link_count) * 8 * with nogil: # <<<<<<<<<<<<<< @@ -26927,7 +26927,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } } - /* "dataRead.pyx":472 + /* "dataRead.pyx":534 * with nogil: * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) * if nread == 24: # <<<<<<<<<<<<<< @@ -26937,180 +26937,180 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_nread == 24); if (__pyx_t_6) { - /* "dataRead.pyx":474 + /* "dataRead.pyx":536 * if nread == 24: * cc_dict = { * 'pointer': cc_ptr, # <<<<<<<<<<<<<< * 'id': b'##CC', * 'length': cc_hdr.length, */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 474, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_ptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 474, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_ptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_pointer, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_pointer, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_id, __pyx_kp_b_CC) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_id, __pyx_kp_b_CC) < 0) __PYX_ERR(0, 536, __pyx_L1_error) - /* "dataRead.pyx":476 + /* "dataRead.pyx":538 * 'pointer': cc_ptr, * 'id': b'##CC', * 'length': cc_hdr.length, # <<<<<<<<<<<<<< * 'link_count': cc_hdr.link_count, * 'cc_tx_name': cc_hdr.cc_tx_name, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.length); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 476, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.length); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 538, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_length, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_length, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":477 + /* "dataRead.pyx":539 * 'id': b'##CC', * 'length': cc_hdr.length, * 'link_count': cc_hdr.link_count, # <<<<<<<<<<<<<< * 'cc_tx_name': cc_hdr.cc_tx_name, * 'cc_md_unit': cc_hdr.cc_md_unit, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.link_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 477, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.link_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_link_count, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_link_count, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":478 + /* "dataRead.pyx":540 * 'length': cc_hdr.length, * 'link_count': cc_hdr.link_count, * 'cc_tx_name': cc_hdr.cc_tx_name, # <<<<<<<<<<<<<< * 'cc_md_unit': cc_hdr.cc_md_unit, * 'cc_md_comment': cc_hdr.cc_md_comment, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 478, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_tx_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_tx_name, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_tx_name, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":479 + /* "dataRead.pyx":541 * 'link_count': cc_hdr.link_count, * 'cc_tx_name': cc_hdr.cc_tx_name, * 'cc_md_unit': cc_hdr.cc_md_unit, # <<<<<<<<<<<<<< * 'cc_md_comment': cc_hdr.cc_md_comment, * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_md_unit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 479, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_md_unit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 541, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_md_unit, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_md_unit, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":480 + /* "dataRead.pyx":542 * 'cc_tx_name': cc_hdr.cc_tx_name, * 'cc_md_unit': cc_hdr.cc_md_unit, * 'cc_md_comment': cc_hdr.cc_md_comment, # <<<<<<<<<<<<<< * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, * 'cc_type': cc_dat.cc_type, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_md_comment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 480, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_md_comment); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 542, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_md_comment, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_md_comment, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":481 + /* "dataRead.pyx":543 * 'cc_md_unit': cc_hdr.cc_md_unit, * 'cc_md_comment': cc_hdr.cc_md_comment, * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, # <<<<<<<<<<<<<< * 'cc_type': cc_dat.cc_type, * 'cc_precision': cc_dat.cc_precision, */ - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_cc_inverse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 481, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_cc_hdr.cc_cc_inverse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 543, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_cc_inverse, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_cc_inverse, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":482 + /* "dataRead.pyx":544 * 'cc_md_comment': cc_hdr.cc_md_comment, * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, * 'cc_type': cc_dat.cc_type, # <<<<<<<<<<<<<< * 'cc_precision': cc_dat.cc_precision, * 'cc_flags': cc_dat.cc_flags, */ - __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cc_dat.cc_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 482, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cc_dat.cc_type); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 544, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_type, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_type, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":483 + /* "dataRead.pyx":545 * 'cc_cc_inverse': cc_hdr.cc_cc_inverse, * 'cc_type': cc_dat.cc_type, * 'cc_precision': cc_dat.cc_precision, # <<<<<<<<<<<<<< * 'cc_flags': cc_dat.cc_flags, * 'cc_ref_count': cc_dat.cc_ref_count, */ - __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cc_dat.cc_precision); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 483, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_cc_dat.cc_precision); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 545, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_precision, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_precision, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":484 + /* "dataRead.pyx":546 * 'cc_type': cc_dat.cc_type, * 'cc_precision': cc_dat.cc_precision, * 'cc_flags': cc_dat.cc_flags, # <<<<<<<<<<<<<< * 'cc_ref_count': cc_dat.cc_ref_count, * 'cc_val_count': cc_dat.cc_val_count, */ - __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 484, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_flags, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_flags, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":485 + /* "dataRead.pyx":547 * 'cc_precision': cc_dat.cc_precision, * 'cc_flags': cc_dat.cc_flags, * 'cc_ref_count': cc_dat.cc_ref_count, # <<<<<<<<<<<<<< * 'cc_val_count': cc_dat.cc_val_count, * 'cc_phy_range_min': cc_dat.cc_phy_range_min, */ - __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_ref_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 485, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_ref_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 547, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_ref_count, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_ref_count, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":486 + /* "dataRead.pyx":548 * 'cc_flags': cc_dat.cc_flags, * 'cc_ref_count': cc_dat.cc_ref_count, * 'cc_val_count': cc_dat.cc_val_count, # <<<<<<<<<<<<<< * 'cc_phy_range_min': cc_dat.cc_phy_range_min, * 'cc_phy_range_max': cc_dat.cc_phy_range_max, */ - __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_val_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 486, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint16_t(__pyx_v_cc_dat.cc_val_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_val_count, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_val_count, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":487 + /* "dataRead.pyx":549 * 'cc_ref_count': cc_dat.cc_ref_count, * 'cc_val_count': cc_dat.cc_val_count, * 'cc_phy_range_min': cc_dat.cc_phy_range_min, # <<<<<<<<<<<<<< * 'cc_phy_range_max': cc_dat.cc_phy_range_max, * } */ - __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cc_dat.cc_phy_range_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 487, __pyx_L1_error) + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cc_dat.cc_phy_range_min); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 549, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_phy_range_min, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_phy_range_min, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":488 + /* "dataRead.pyx":550 * 'cc_val_count': cc_dat.cc_val_count, * 'cc_phy_range_min': cc_dat.cc_phy_range_min, * 'cc_phy_range_max': cc_dat.cc_phy_range_max, # <<<<<<<<<<<<<< * } * # Read cc_val (doubles) for common conversion types */ - __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cc_dat.cc_phy_range_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 488, __pyx_L1_error) + __pyx_t_2 = PyFloat_FromDouble(__pyx_v_cc_dat.cc_phy_range_max); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 550, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_phy_range_max, __pyx_t_2) < 0) __PYX_ERR(0, 474, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_u_cc_phy_range_max, __pyx_t_2) < 0) __PYX_ERR(0, 536, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_cc_dict, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; - /* "dataRead.pyx":491 + /* "dataRead.pyx":553 * } * # Read cc_val (doubles) for common conversion types * if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): # <<<<<<<<<<<<<< @@ -27141,7 +27141,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_L49_bool_binop_done:; if (__pyx_t_6) { - /* "dataRead.pyx":492 + /* "dataRead.pyx":554 * # Read cc_val (doubles) for common conversion types * if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): * n_bytes = cc_dat.cc_val_count * 8 # <<<<<<<<<<<<<< @@ -27150,7 +27150,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_n_bytes = (__pyx_v_cc_dat.cc_val_count * 8); - /* "dataRead.pyx":493 + /* "dataRead.pyx":555 * if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): * n_bytes = cc_dat.cc_val_count * 8 * cc_val_buf = PyMem_Malloc(n_bytes) # <<<<<<<<<<<<<< @@ -27159,7 +27159,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_cc_val_buf = ((unsigned char *)PyMem_Malloc(__pyx_v_n_bytes)); - /* "dataRead.pyx":494 + /* "dataRead.pyx":556 * n_bytes = cc_dat.cc_val_count * 8 * cc_val_buf = PyMem_Malloc(n_bytes) * if cc_val_buf != NULL: # <<<<<<<<<<<<<< @@ -27169,7 +27169,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_cc_val_buf != NULL); if (__pyx_t_6) { - /* "dataRead.pyx":495 + /* "dataRead.pyx":557 * cc_val_buf = PyMem_Malloc(n_bytes) * if cc_val_buf != NULL: * try: # <<<<<<<<<<<<<< @@ -27178,7 +27178,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ /*try:*/ { - /* "dataRead.pyx":496 + /* "dataRead.pyx":558 * if cc_val_buf != NULL: * try: * with nogil: # <<<<<<<<<<<<<< @@ -27194,7 +27194,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ #endif /*try:*/ { - /* "dataRead.pyx":497 + /* "dataRead.pyx":559 * try: * with nogil: * nread = c_pread(fd, cc_val_buf, # <<<<<<<<<<<<<< @@ -27204,7 +27204,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_v_nread = pread(__pyx_v_fd, __pyx_v_cc_val_buf, __pyx_v_n_bytes, ((__pyx_v_cc_ptr + __pyx_v_cc_data_offset) + 24)); } - /* "dataRead.pyx":496 + /* "dataRead.pyx":558 * if cc_val_buf != NULL: * try: * with nogil: # <<<<<<<<<<<<<< @@ -27223,7 +27223,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } } - /* "dataRead.pyx":500 + /* "dataRead.pyx":562 * n_bytes, * cc_ptr + cc_data_offset + 24) * if nread == n_bytes: # <<<<<<<<<<<<<< @@ -27233,7 +27233,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_nread == __pyx_v_n_bytes); if (__pyx_t_6) { - /* "dataRead.pyx":501 + /* "dataRead.pyx":563 * cc_ptr + cc_data_offset + 24) * if nread == n_bytes: * dbl_ptr = cc_val_buf # <<<<<<<<<<<<<< @@ -27242,19 +27242,19 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ __pyx_v_dbl_ptr = ((double *)__pyx_v_cc_val_buf); - /* "dataRead.pyx":502 + /* "dataRead.pyx":564 * if nread == n_bytes: * dbl_ptr = cc_val_buf * cc_val_list = [] # <<<<<<<<<<<<<< * for i in range(cc_dat.cc_val_count): * cc_val_list.append(dbl_ptr[i]) */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 502, __pyx_L55_error) + __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 564, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XDECREF_SET(__pyx_v_cc_val_list, ((PyObject*)__pyx_t_1)); __pyx_t_1 = 0; - /* "dataRead.pyx":503 + /* "dataRead.pyx":565 * dbl_ptr = cc_val_buf * cc_val_list = [] * for i in range(cc_dat.cc_val_count): # <<<<<<<<<<<<<< @@ -27266,29 +27266,29 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_15; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":504 + /* "dataRead.pyx":566 * cc_val_list = [] * for i in range(cc_dat.cc_val_count): * cc_val_list.append(dbl_ptr[i]) # <<<<<<<<<<<<<< * cc_dict['cc_val'] = cc_val_list * finally: */ - __pyx_t_1 = PyFloat_FromDouble((__pyx_v_dbl_ptr[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 504, __pyx_L55_error) + __pyx_t_1 = PyFloat_FromDouble((__pyx_v_dbl_ptr[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 566, __pyx_L55_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_cc_val_list, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 504, __pyx_L55_error) + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_cc_val_list, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 566, __pyx_L55_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - /* "dataRead.pyx":505 + /* "dataRead.pyx":567 * for i in range(cc_dat.cc_val_count): * cc_val_list.append(dbl_ptr[i]) * cc_dict['cc_val'] = cc_val_list # <<<<<<<<<<<<<< * finally: * PyMem_Free(cc_val_buf) */ - if (unlikely((PyDict_SetItem(__pyx_v_cc_dict, __pyx_n_u_cc_val, __pyx_v_cc_val_list) < 0))) __PYX_ERR(0, 505, __pyx_L55_error) + if (unlikely((PyDict_SetItem(__pyx_v_cc_dict, __pyx_n_u_cc_val, __pyx_v_cc_val_list) < 0))) __PYX_ERR(0, 567, __pyx_L55_error) - /* "dataRead.pyx":500 + /* "dataRead.pyx":562 * n_bytes, * cc_ptr + cc_data_offset + 24) * if nread == n_bytes: # <<<<<<<<<<<<<< @@ -27298,7 +27298,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } } - /* "dataRead.pyx":507 + /* "dataRead.pyx":569 * cc_dict['cc_val'] = cc_val_list * finally: * PyMem_Free(cc_val_buf) # <<<<<<<<<<<<<< @@ -27347,7 +27347,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_L56:; } - /* "dataRead.pyx":494 + /* "dataRead.pyx":556 * n_bytes = cc_dat.cc_val_count * 8 * cc_val_buf = PyMem_Malloc(n_bytes) * if cc_val_buf != NULL: # <<<<<<<<<<<<<< @@ -27356,7 +27356,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":491 + /* "dataRead.pyx":553 * } * # Read cc_val (doubles) for common conversion types * if cc_dat.cc_val_count > 0 and cc_dat.cc_type not in (3, 7, 8, 9, 10, 11): # <<<<<<<<<<<<<< @@ -27365,7 +27365,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":509 + /* "dataRead.pyx":571 * PyMem_Free(cc_val_buf) * # Mark complex CC types for Python re-read * if cc_dat.cc_type in (3, 7, 8, 9, 10, 11): # <<<<<<<<<<<<<< @@ -27380,16 +27380,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ case 10: case 11: - /* "dataRead.pyx":510 + /* "dataRead.pyx":572 * # Mark complex CC types for Python re-read * if cc_dat.cc_type in (3, 7, 8, 9, 10, 11): * cc_dict['_needs_completion'] = True # <<<<<<<<<<<<<< * * # Read SI block (cached) */ - if (unlikely((PyDict_SetItem(__pyx_v_cc_dict, __pyx_n_u_needs_completion, Py_True) < 0))) __PYX_ERR(0, 510, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cc_dict, __pyx_n_u_needs_completion, Py_True) < 0))) __PYX_ERR(0, 572, __pyx_L1_error) - /* "dataRead.pyx":509 + /* "dataRead.pyx":571 * PyMem_Free(cc_val_buf) * # Mark complex CC types for Python re-read * if cc_dat.cc_type in (3, 7, 8, 9, 10, 11): # <<<<<<<<<<<<<< @@ -27400,7 +27400,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ default: break; } - /* "dataRead.pyx":472 + /* "dataRead.pyx":534 * with nogil: * nread = c_pread(fd, &cc_dat, 24, cc_ptr + cc_data_offset) * if nread == 24: # <<<<<<<<<<<<<< @@ -27409,7 +27409,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":468 + /* "dataRead.pyx":530 * with nogil: * nread = c_pread(fd, &cc_hdr, 56, cc_ptr) * if nread == 56: # <<<<<<<<<<<<<< @@ -27418,7 +27418,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":465 + /* "dataRead.pyx":527 * cc_ptr = cn_hdr.cn_cc_conversion * cc_dict = {'cc_type': 0} * if cc_ptr != 0: # <<<<<<<<<<<<<< @@ -27427,7 +27427,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":513 + /* "dataRead.pyx":575 * * # Read SI block (cached) * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: # <<<<<<<<<<<<<< @@ -27451,7 +27451,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_L70_bool_binop_done:; if (__pyx_t_6) { - /* "dataRead.pyx":514 + /* "dataRead.pyx":576 * # Read SI block (cached) * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: * si_ptr = cn_hdr.cn_si_source # <<<<<<<<<<<<<< @@ -27461,43 +27461,43 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_11 = __pyx_v_cn_hdr.cn_si_source; __pyx_v_si_ptr = __pyx_t_11; - /* "dataRead.pyx":515 + /* "dataRead.pyx":577 * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: * si_ptr = cn_hdr.cn_si_source * if si_ptr not in si_cache: # <<<<<<<<<<<<<< * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) * si_dict = si_cache.get(si_ptr) */ - __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 577, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (unlikely(__pyx_v_si_cache == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 515, __pyx_L1_error) + __PYX_ERR(0, 577, __pyx_L1_error) } - __pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_t_1, __pyx_v_si_cache, Py_NE)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 515, __pyx_L1_error) + __pyx_t_6 = (__Pyx_PyDict_ContainsTF(__pyx_t_1, __pyx_v_si_cache, Py_NE)); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(0, 577, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_6) { - /* "dataRead.pyx":516 + /* "dataRead.pyx":578 * si_ptr = cn_hdr.cn_si_source * if si_ptr not in si_cache: * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) # <<<<<<<<<<<<<< * si_dict = si_cache.get(si_ptr) * if si_dict is not None: */ - __pyx_t_1 = __pyx_f_8dataRead__fast_read_si(__pyx_v_fd, __pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 516, __pyx_L1_error) + __pyx_t_1 = __pyx_f_8dataRead__fast_read_si(__pyx_v_fd, __pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (unlikely(__pyx_v_si_cache == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 516, __pyx_L1_error) + __PYX_ERR(0, 578, __pyx_L1_error) } - __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 516, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 578, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (unlikely((PyDict_SetItem(__pyx_v_si_cache, __pyx_t_2, __pyx_t_1) < 0))) __PYX_ERR(0, 516, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_si_cache, __pyx_t_2, __pyx_t_1) < 0))) __PYX_ERR(0, 578, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":515 + /* "dataRead.pyx":577 * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: * si_ptr = cn_hdr.cn_si_source * if si_ptr not in si_cache: # <<<<<<<<<<<<<< @@ -27506,7 +27506,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":517 + /* "dataRead.pyx":579 * if si_ptr not in si_cache: * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) * si_dict = si_cache.get(si_ptr) # <<<<<<<<<<<<<< @@ -27515,18 +27515,18 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ if (unlikely(__pyx_v_si_cache == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get"); - __PYX_ERR(0, 517, __pyx_L1_error) + __PYX_ERR(0, 579, __pyx_L1_error) } - __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_uint64_t(__pyx_v_si_ptr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_si_cache, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_si_cache, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 517, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 579, __pyx_L1_error) __Pyx_XDECREF_SET(__pyx_v_si_dict, ((PyObject*)__pyx_t_2)); __pyx_t_2 = 0; - /* "dataRead.pyx":518 + /* "dataRead.pyx":580 * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) * si_dict = si_cache.get(si_ptr) * if si_dict is not None: # <<<<<<<<<<<<<< @@ -27536,16 +27536,16 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_t_6 = (__pyx_v_si_dict != ((PyObject*)Py_None)); if (__pyx_t_6) { - /* "dataRead.pyx":519 + /* "dataRead.pyx":581 * si_dict = si_cache.get(si_ptr) * if si_dict is not None: * cn_dict['SI'] = si_dict # <<<<<<<<<<<<<< * * results.append((cn_key, cn_dict, cc_dict)) */ - if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_SI_2, __pyx_v_si_dict) < 0))) __PYX_ERR(0, 519, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_cn_dict, __pyx_n_u_SI_2, __pyx_v_si_dict) < 0))) __PYX_ERR(0, 581, __pyx_L1_error) - /* "dataRead.pyx":518 + /* "dataRead.pyx":580 * si_cache[si_ptr] = _fast_read_si(fd, si_ptr) * si_dict = si_cache.get(si_ptr) * if si_dict is not None: # <<<<<<<<<<<<<< @@ -27554,7 +27554,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":513 + /* "dataRead.pyx":575 * * # Read SI block (cached) * if not minimal and not channel_name_list and cn_hdr.cn_si_source != 0: # <<<<<<<<<<<<<< @@ -27563,28 +27563,28 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ */ } - /* "dataRead.pyx":521 + /* "dataRead.pyx":583 * cn_dict['SI'] = si_dict * * results.append((cn_key, cn_dict, cc_dict)) # <<<<<<<<<<<<<< * pointer = cn_hdr.cn_cn_next * */ - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error) + __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 583, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_cn_key); __Pyx_GIVEREF(__pyx_v_cn_key); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cn_key)) __PYX_ERR(0, 521, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_cn_key)) __PYX_ERR(0, 583, __pyx_L1_error); __Pyx_INCREF(__pyx_v_cn_dict); __Pyx_GIVEREF(__pyx_v_cn_dict); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_cn_dict)) __PYX_ERR(0, 521, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_cn_dict)) __PYX_ERR(0, 583, __pyx_L1_error); __Pyx_INCREF(__pyx_v_cc_dict); __Pyx_GIVEREF(__pyx_v_cc_dict); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_cc_dict)) __PYX_ERR(0, 521, __pyx_L1_error); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_results, __pyx_t_2); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 521, __pyx_L1_error) + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_cc_dict)) __PYX_ERR(0, 583, __pyx_L1_error); + __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_results, __pyx_t_2); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 583, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":522 + /* "dataRead.pyx":584 * * results.append((cn_key, cn_dict, cc_dict)) * pointer = cn_hdr.cn_cn_next # <<<<<<<<<<<<<< @@ -27596,7 +27596,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ } __pyx_L4_break:; - /* "dataRead.pyx":524 + /* "dataRead.pyx":586 * pointer = cn_hdr.cn_cn_next * * return results # <<<<<<<<<<<<<< @@ -27608,7 +27608,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ __pyx_r = __pyx_v_results; goto __pyx_L0; - /* "dataRead.pyx":322 + /* "dataRead.pyx":384 * * * def read_cn_chain_fast(object fid, uint64_t first_pointer, # <<<<<<<<<<<<<< @@ -27639,7 +27639,7 @@ static PyObject *__pyx_pf_8dataRead_read_cn_chain_fast(CYTHON_UNUSED PyObject *_ return __pyx_r; } -/* "dataRead.pyx":527 +/* "dataRead.pyx":589 * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< @@ -27728,7 +27728,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -27736,9 +27736,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 1); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 1); __PYX_ERR(0, 589, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -27746,9 +27746,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 2); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 2); __PYX_ERR(0, 589, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: @@ -27756,9 +27756,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 3); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 3); __PYX_ERR(0, 589, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: @@ -27766,9 +27766,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 4); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 4); __PYX_ERR(0, 589, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 5: @@ -27776,9 +27776,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[5]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 5); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 5); __PYX_ERR(0, 589, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 6: @@ -27786,9 +27786,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[6]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 6); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 6); __PYX_ERR(0, 589, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 7: @@ -27796,9 +27796,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[7]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 7); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 7); __PYX_ERR(0, 589, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 8: @@ -27806,9 +27806,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[8]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 8); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 8); __PYX_ERR(0, 589, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 9: @@ -27816,14 +27816,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[9]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 527, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 589, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 9); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, 9); __PYX_ERR(0, 589, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sorted_data_read") < 0)) __PYX_ERR(0, 527, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sorted_data_read") < 0)) __PYX_ERR(0, 589, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 10)) { goto __pyx_L5_argtuple_error; @@ -27840,19 +27840,19 @@ PyObject *__pyx_args, PyObject *__pyx_kwds values[9] = __Pyx_Arg_FASTCALL(__pyx_args, 9); } __pyx_v_tmp = ((PyObject*)values[0]); - __pyx_v_bit_count = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_bit_count == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 529, __pyx_L3_error) - __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 530, __pyx_L3_error) + __pyx_v_bit_count = __Pyx_PyInt_As_unsigned_short(values[1]); if (unlikely((__pyx_v_bit_count == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 591, __pyx_L3_error) + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[2]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 592, __pyx_L3_error) __pyx_v_record_format = ((PyObject*)values[3]); - __pyx_v_number_of_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_number_of_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 530, __pyx_L3_error) - __pyx_v_record_byte_size = __Pyx_PyInt_As_unsigned_long(values[5]); if (unlikely((__pyx_v_record_byte_size == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 531, __pyx_L3_error) - __pyx_v_bit_offset = __Pyx_PyInt_As_unsigned_char(values[6]); if (unlikely((__pyx_v_bit_offset == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 531, __pyx_L3_error) - __pyx_v_pos_byte_beg = __Pyx_PyInt_As_unsigned_long(values[7]); if (unlikely((__pyx_v_pos_byte_beg == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L3_error) - __pyx_v_n_bytes = __Pyx_PyInt_As_unsigned_long(values[8]); if (unlikely((__pyx_v_n_bytes == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 532, __pyx_L3_error) + __pyx_v_number_of_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_number_of_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 592, __pyx_L3_error) + __pyx_v_record_byte_size = __Pyx_PyInt_As_unsigned_long(values[5]); if (unlikely((__pyx_v_record_byte_size == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 593, __pyx_L3_error) + __pyx_v_bit_offset = __Pyx_PyInt_As_unsigned_char(values[6]); if (unlikely((__pyx_v_bit_offset == (unsigned char)-1) && PyErr_Occurred())) __PYX_ERR(0, 593, __pyx_L3_error) + __pyx_v_pos_byte_beg = __Pyx_PyInt_As_unsigned_long(values[7]); if (unlikely((__pyx_v_pos_byte_beg == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L3_error) + __pyx_v_n_bytes = __Pyx_PyInt_As_unsigned_long(values[8]); if (unlikely((__pyx_v_n_bytes == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L3_error) __pyx_v_array = values[9]; } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, __pyx_nargs); __PYX_ERR(0, 527, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sorted_data_read", 1, 10, 10, __pyx_nargs); __PYX_ERR(0, 589, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -27866,8 +27866,8 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 529, __pyx_L1_error) - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_record_format), (&PyUnicode_Type), 1, "record_format", 1))) __PYX_ERR(0, 530, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 591, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_record_format), (&PyUnicode_Type), 1, "record_format", 1))) __PYX_ERR(0, 592, __pyx_L1_error) __pyx_r = __pyx_pf_8dataRead_2sorted_data_read(__pyx_self, __pyx_v_tmp, __pyx_v_bit_count, __pyx_v_signal_data_type, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_bit_offset, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_array); /* function exit code */ @@ -27901,28 +27901,28 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("sorted_data_read", 1); - /* "dataRead.pyx":564 + /* "dataRead.pyx":626 * Byte order is swapped if necessary to match machine byte order before bits offset and masking * """ * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< * if not array: * if 'V' in record_format or 'S' in record_format or record_format is None: */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 564, __pyx_L1_error) + __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 626, __pyx_L1_error) __pyx_v_bit_stream = __pyx_t_1; - /* "dataRead.pyx":565 + /* "dataRead.pyx":627 * """ * cdef const char* bit_stream = PyBytes_AsString(tmp) * if not array: # <<<<<<<<<<<<<< * if 'V' in record_format or 'S' in record_format or record_format is None: * return read_byte(bit_stream, record_format, number_of_records, */ - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_array); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 565, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_array); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 627, __pyx_L1_error) __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { - /* "dataRead.pyx":566 + /* "dataRead.pyx":628 * cdef const char* bit_stream = PyBytes_AsString(tmp) * if not array: * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< @@ -27931,9 +27931,9 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (unlikely(__pyx_v_record_format == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 566, __pyx_L1_error) + __PYX_ERR(0, 628, __pyx_L1_error) } - __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_V, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 566, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_V, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 628, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; @@ -27941,9 +27941,9 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } if (unlikely(__pyx_v_record_format == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 566, __pyx_L1_error) + __PYX_ERR(0, 628, __pyx_L1_error) } - __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_S, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 566, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_ContainsTF(__pyx_n_u_S, __pyx_v_record_format, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 628, __pyx_L1_error) if (!__pyx_t_2) { } else { __pyx_t_3 = __pyx_t_2; @@ -27954,7 +27954,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L5_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":567 + /* "dataRead.pyx":629 * if not array: * if 'V' in record_format or 'S' in record_format or record_format is None: * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -27963,20 +27963,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":568 + /* "dataRead.pyx":630 * if 'V' in record_format or 'S' in record_format or record_format is None: * return read_byte(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< * elif signal_data_type in (4, 5) and n_bytes == 4: # float * if (byteorder == 'little' and signal_data_type == 4) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 567, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":566 + /* "dataRead.pyx":628 * cdef const char* bit_stream = PyBytes_AsString(tmp) * if not array: * if 'V' in record_format or 'S' in record_format or record_format is None: # <<<<<<<<<<<<<< @@ -27985,7 +27985,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":569 + /* "dataRead.pyx":631 * return read_byte(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< @@ -28012,16 +28012,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L8_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":570 + /* "dataRead.pyx":632 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * elif signal_data_type in (4, 5) and n_bytes == 4: # float * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 5): * return read_float(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 570, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 570, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 632, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { goto __pyx_L12_next_or; @@ -28035,16 +28035,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L12_next_or:; - /* "dataRead.pyx":571 + /* "dataRead.pyx":633 * elif signal_data_type in (4, 5) and n_bytes == 4: # float * if (byteorder == 'little' and signal_data_type == 4) or \ * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< * return read_float(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 571, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 633, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 571, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 633, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { } else { @@ -28055,7 +28055,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_5; __pyx_L11_bool_binop_done:; - /* "dataRead.pyx":570 + /* "dataRead.pyx":632 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * elif signal_data_type in (4, 5) and n_bytes == 4: # float * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< @@ -28064,7 +28064,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":572 + /* "dataRead.pyx":634 * if (byteorder == 'little' and signal_data_type == 4) or \ * (byteorder == 'big' and signal_data_type == 5): * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28073,20 +28073,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":573 + /* "dataRead.pyx":635 * (byteorder == 'big' and signal_data_type == 5): * return read_float(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_float(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 572, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 634, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":570 + /* "dataRead.pyx":632 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * elif signal_data_type in (4, 5) and n_bytes == 4: # float * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< @@ -28095,7 +28095,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":575 + /* "dataRead.pyx":637 * record_byte_size, pos_byte_beg, 0) * else: # swap bytes * return read_float(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28105,21 +28105,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":576 + /* "dataRead.pyx":638 * else: # swap bytes * return read_float(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (4, 5) and n_bytes == 8: # double * if (byteorder == 'little' and signal_data_type == 4) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 575, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_float(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":569 + /* "dataRead.pyx":631 * return read_byte(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * elif signal_data_type in (4, 5) and n_bytes == 4: # float # <<<<<<<<<<<<<< @@ -28128,7 +28128,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":577 + /* "dataRead.pyx":639 * return read_float(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< @@ -28155,16 +28155,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L15_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":578 + /* "dataRead.pyx":640 * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 8: # double * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 5): * return read_double(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 578, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 640, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 578, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 640, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { goto __pyx_L19_next_or; @@ -28178,16 +28178,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L19_next_or:; - /* "dataRead.pyx":579 + /* "dataRead.pyx":641 * elif signal_data_type in (4, 5) and n_bytes == 8: # double * if (byteorder == 'little' and signal_data_type == 4) or \ * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< * return read_double(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 579, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 641, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 579, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 641, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -28198,7 +28198,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_2; __pyx_L18_bool_binop_done:; - /* "dataRead.pyx":578 + /* "dataRead.pyx":640 * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 8: # double * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< @@ -28207,7 +28207,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":580 + /* "dataRead.pyx":642 * if (byteorder == 'little' and signal_data_type == 4) or \ * (byteorder == 'big' and signal_data_type == 5): * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28216,20 +28216,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":581 + /* "dataRead.pyx":643 * (byteorder == 'big' and signal_data_type == 5): * return read_double(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_double(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 580, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 642, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":578 + /* "dataRead.pyx":640 * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 8: # double * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< @@ -28238,7 +28238,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":583 + /* "dataRead.pyx":645 * record_byte_size, pos_byte_beg, 0) * else: # swap bytes * return read_double(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28248,21 +28248,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":584 + /* "dataRead.pyx":646 * else: # swap bytes * return read_double(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision * if (byteorder == 'little' and signal_data_type == 4) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 583, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_double(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 645, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":577 + /* "dataRead.pyx":639 * return read_float(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 8: # double # <<<<<<<<<<<<<< @@ -28271,7 +28271,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":585 + /* "dataRead.pyx":647 * return read_double(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< @@ -28298,16 +28298,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L22_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":586 + /* "dataRead.pyx":648 * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 5): * return read_half(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 586, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 586, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 648, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { goto __pyx_L26_next_or; @@ -28321,16 +28321,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L26_next_or:; - /* "dataRead.pyx":587 + /* "dataRead.pyx":649 * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision * if (byteorder == 'little' and signal_data_type == 4) or \ * (byteorder == 'big' and signal_data_type == 5): # <<<<<<<<<<<<<< * return read_half(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 587, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 649, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 587, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 649, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { } else { @@ -28341,7 +28341,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_5; __pyx_L25_bool_binop_done:; - /* "dataRead.pyx":586 + /* "dataRead.pyx":648 * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< @@ -28350,7 +28350,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":588 + /* "dataRead.pyx":650 * if (byteorder == 'little' and signal_data_type == 4) or \ * (byteorder == 'big' and signal_data_type == 5): * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28359,20 +28359,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":589 + /* "dataRead.pyx":651 * (byteorder == 'big' and signal_data_type == 5): * return read_half(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_half(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 588, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 650, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":586 + /* "dataRead.pyx":648 * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision * if (byteorder == 'little' and signal_data_type == 4) or \ # <<<<<<<<<<<<<< @@ -28381,7 +28381,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":591 + /* "dataRead.pyx":653 * record_byte_size, pos_byte_beg, 0) * else: # swap bytes * return read_half(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28391,21 +28391,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":592 + /* "dataRead.pyx":654 * else: # swap bytes * return read_half(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char * return read_unsigned_char(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 591, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_half(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 653, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":585 + /* "dataRead.pyx":647 * return read_double(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (4, 5) and n_bytes == 2: # half precision # <<<<<<<<<<<<<< @@ -28414,7 +28414,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":593 + /* "dataRead.pyx":655 * return read_half(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< @@ -28442,7 +28442,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L29_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":594 + /* "dataRead.pyx":656 * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char * return read_unsigned_char(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28451,20 +28451,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":595 + /* "dataRead.pyx":657 * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char * return read_unsigned_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) # <<<<<<<<<<<<<< * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char * return read_signed_char(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 594, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 656, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":593 + /* "dataRead.pyx":655 * return read_half(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 1) * elif signal_data_type in (0, 1, 13) and n_bytes == 1: # unsigned char # <<<<<<<<<<<<<< @@ -28473,7 +28473,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":596 + /* "dataRead.pyx":658 * return read_unsigned_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char # <<<<<<<<<<<<<< @@ -28500,7 +28500,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L31_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":597 + /* "dataRead.pyx":659 * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char * return read_signed_char(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28509,20 +28509,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":598 + /* "dataRead.pyx":660 * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char * return read_signed_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) # <<<<<<<<<<<<<< * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 597, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_char(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":596 + /* "dataRead.pyx":658 * return read_unsigned_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (2, 3) and n_bytes == 1: # signed char # <<<<<<<<<<<<<< @@ -28531,7 +28531,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":599 + /* "dataRead.pyx":661 * return read_signed_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short # <<<<<<<<<<<<<< @@ -28560,16 +28560,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L33_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":600 + /* "dataRead.pyx":662 * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_short(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 600, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 662, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 600, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 662, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { goto __pyx_L37_next_or; @@ -28583,16 +28583,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L37_next_or:; - /* "dataRead.pyx":601 + /* "dataRead.pyx":663 * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 601, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 663, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 601, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 663, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -28603,7 +28603,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_2; __pyx_L36_bool_binop_done:; - /* "dataRead.pyx":600 + /* "dataRead.pyx":662 * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -28612,7 +28612,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":602 + /* "dataRead.pyx":664 * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28621,20 +28621,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":603 + /* "dataRead.pyx":665 * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_unsigned_short(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 602, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 664, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":600 + /* "dataRead.pyx":662 * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -28643,7 +28643,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":605 + /* "dataRead.pyx":667 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) * else: # swap bytes * return read_unsigned_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28653,21 +28653,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":606 + /* "dataRead.pyx":668 * else: # swap bytes * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 605, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":599 + /* "dataRead.pyx":661 * return read_signed_char(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset) * elif signal_data_type in (0, 1, 13, 14) and n_bytes <= 2: # unsigned short # <<<<<<<<<<<<<< @@ -28676,7 +28676,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":607 + /* "dataRead.pyx":669 * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short # <<<<<<<<<<<<<< @@ -28703,16 +28703,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L40_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":608 + /* "dataRead.pyx":670 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 3): * return read_signed_short(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 608, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 670, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 608, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 670, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { goto __pyx_L44_next_or; @@ -28726,16 +28726,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L44_next_or:; - /* "dataRead.pyx":609 + /* "dataRead.pyx":671 * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 609, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 671, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 609, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 671, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { } else { @@ -28746,7 +28746,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_5; __pyx_L43_bool_binop_done:; - /* "dataRead.pyx":608 + /* "dataRead.pyx":670 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -28755,7 +28755,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":610 + /* "dataRead.pyx":672 * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): * return read_signed_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28764,20 +28764,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":611 + /* "dataRead.pyx":673 * (byteorder == 'big' and signal_data_type == 3): * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_signed_short(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 610, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 672, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":608 + /* "dataRead.pyx":670 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -28786,7 +28786,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":613 + /* "dataRead.pyx":675 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 0) * else: # swap bytes * return read_signed_short(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28796,21 +28796,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":614 + /* "dataRead.pyx":676 * else: # swap bytes * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 613, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_short(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 675, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":607 + /* "dataRead.pyx":669 * return read_unsigned_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (2, 3) and n_bytes <= 2: # signed short # <<<<<<<<<<<<<< @@ -28819,7 +28819,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":615 + /* "dataRead.pyx":677 * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int # <<<<<<<<<<<<<< @@ -28847,16 +28847,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L47_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":616 + /* "dataRead.pyx":678 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 616, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 678, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 616, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 678, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { goto __pyx_L51_next_or; @@ -28870,16 +28870,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L51_next_or:; - /* "dataRead.pyx":617 + /* "dataRead.pyx":679 * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 617, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 679, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 617, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 679, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -28890,7 +28890,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_2; __pyx_L50_bool_binop_done:; - /* "dataRead.pyx":616 + /* "dataRead.pyx":678 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -28899,7 +28899,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":618 + /* "dataRead.pyx":680 * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28908,20 +28908,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":619 + /* "dataRead.pyx":681 * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_unsigned_int(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 618, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":616 + /* "dataRead.pyx":678 * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -28930,7 +28930,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":621 + /* "dataRead.pyx":683 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) * else: # swap bytes * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -28940,21 +28940,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":622 + /* "dataRead.pyx":684 * else: # swap bytes * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 621, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":615 + /* "dataRead.pyx":677 * return read_signed_short(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, 1) * elif signal_data_type in (0, 1, 14) and n_bytes <= 4: # unsigned int # <<<<<<<<<<<<<< @@ -28963,7 +28963,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":623 + /* "dataRead.pyx":685 * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int # <<<<<<<<<<<<<< @@ -28990,16 +28990,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L54_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":624 + /* "dataRead.pyx":686 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 3): * return read_signed_int(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 624, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 624, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 686, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { goto __pyx_L58_next_or; @@ -29013,16 +29013,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L58_next_or:; - /* "dataRead.pyx":625 + /* "dataRead.pyx":687 * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 625, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 687, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 625, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 687, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { } else { @@ -29033,7 +29033,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_5; __pyx_L57_bool_binop_done:; - /* "dataRead.pyx":624 + /* "dataRead.pyx":686 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -29042,7 +29042,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":626 + /* "dataRead.pyx":688 * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): * return read_signed_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29051,20 +29051,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":627 + /* "dataRead.pyx":689 * (byteorder == 'big' and signal_data_type == 3): * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_signed_int(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 626, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":624 + /* "dataRead.pyx":686 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -29073,7 +29073,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":629 + /* "dataRead.pyx":691 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) * else: # swap bytes * return read_signed_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29083,21 +29083,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":630 + /* "dataRead.pyx":692 * else: # swap bytes * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 629, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":623 + /* "dataRead.pyx":685 * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 4: # signed int # <<<<<<<<<<<<<< @@ -29106,7 +29106,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":631 + /* "dataRead.pyx":693 * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long # <<<<<<<<<<<<<< @@ -29133,16 +29133,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L61_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":632 + /* "dataRead.pyx":694 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 632, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 632, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 694, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { goto __pyx_L65_next_or; @@ -29156,16 +29156,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L65_next_or:; - /* "dataRead.pyx":633 + /* "dataRead.pyx":695 * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): # <<<<<<<<<<<<<< * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 633, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 633, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 695, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -29176,7 +29176,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_2; __pyx_L64_bool_binop_done:; - /* "dataRead.pyx":632 + /* "dataRead.pyx":694 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -29185,7 +29185,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":634 + /* "dataRead.pyx":696 * if (byteorder == 'little' and signal_data_type == 0) or \ * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29194,20 +29194,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":635 + /* "dataRead.pyx":697 * (byteorder == 'big' and signal_data_type == 1): * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 634, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 696, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":632 + /* "dataRead.pyx":694 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long * if (byteorder == 'little' and signal_data_type == 0) or \ # <<<<<<<<<<<<<< @@ -29216,7 +29216,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":637 + /* "dataRead.pyx":699 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) * else: # swap bytes * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29226,21 +29226,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":638 + /* "dataRead.pyx":700 * else: # swap bytes * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 637, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":631 + /* "dataRead.pyx":693 * return read_signed_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (0, 1) and n_bytes <= 8: # unsigned long long # <<<<<<<<<<<<<< @@ -29249,7 +29249,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":639 + /* "dataRead.pyx":701 * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long # <<<<<<<<<<<<<< @@ -29276,16 +29276,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_L68_bool_binop_done:; if (__pyx_t_3) { - /* "dataRead.pyx":640 + /* "dataRead.pyx":702 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 3): * return read_signed_longlong(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 640, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 702, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 640, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 702, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_5) { goto __pyx_L72_next_or; @@ -29299,16 +29299,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L72_next_or:; - /* "dataRead.pyx":641 + /* "dataRead.pyx":703 * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): # <<<<<<<<<<<<<< * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 641, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 641, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 703, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { } else { @@ -29319,7 +29319,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_3 = __pyx_t_5; __pyx_L71_bool_binop_done:; - /* "dataRead.pyx":640 + /* "dataRead.pyx":702 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -29328,7 +29328,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_3) { - /* "dataRead.pyx":642 + /* "dataRead.pyx":704 * if (byteorder == 'little' and signal_data_type == 2) or \ * (byteorder == 'big' and signal_data_type == 3): * return read_signed_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29337,20 +29337,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":643 + /* "dataRead.pyx":705 * (byteorder == 'big' and signal_data_type == 3): * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_signed_longlong(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 642, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":640 + /* "dataRead.pyx":702 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long * if (byteorder == 'little' and signal_data_type == 2) or \ # <<<<<<<<<<<<<< @@ -29359,7 +29359,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":645 + /* "dataRead.pyx":707 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 0) * else: # swap bytes * return read_signed_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29369,21 +29369,21 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":646 + /* "dataRead.pyx":708 * else: # swap bytes * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) # <<<<<<<<<<<<<< * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 645, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_signed_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_bit_count, __pyx_v_bit_offset, __pyx_v_n_bytes, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; } - /* "dataRead.pyx":639 + /* "dataRead.pyx":701 * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (2, 3) and n_bytes <= 8: # signed long long # <<<<<<<<<<<<<< @@ -29392,7 +29392,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":647 + /* "dataRead.pyx":709 * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex # <<<<<<<<<<<<<< @@ -29411,16 +29411,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_5 = __pyx_t_3; if (__pyx_t_5) { - /* "dataRead.pyx":648 + /* "dataRead.pyx":710 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< * (byteorder == 'big' and signal_data_type == 16): * swap_flag = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 648, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 648, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 710, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_3) { goto __pyx_L77_next_or; @@ -29434,16 +29434,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L77_next_or:; - /* "dataRead.pyx":649 + /* "dataRead.pyx":711 * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ * (byteorder == 'big' and signal_data_type == 16): # <<<<<<<<<<<<<< * swap_flag = 0 * else: # swap bytes */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 649, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 649, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 711, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_3) { } else { @@ -29454,7 +29454,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_5 = __pyx_t_3; __pyx_L76_bool_binop_done:; - /* "dataRead.pyx":648 + /* "dataRead.pyx":710 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< @@ -29463,7 +29463,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_5) { - /* "dataRead.pyx":650 + /* "dataRead.pyx":712 * if (byteorder == 'little' and signal_data_type == 15) or \ * (byteorder == 'big' and signal_data_type == 16): * swap_flag = 0 # <<<<<<<<<<<<<< @@ -29472,7 +29472,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __pyx_v_swap_flag = 0; - /* "dataRead.pyx":648 + /* "dataRead.pyx":710 * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex * if (byteorder == 'little' and signal_data_type == 15) or \ # <<<<<<<<<<<<<< @@ -29482,7 +29482,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ goto __pyx_L75; } - /* "dataRead.pyx":652 + /* "dataRead.pyx":714 * swap_flag = 0 * else: # swap bytes * swap_flag = 1 # <<<<<<<<<<<<<< @@ -29494,7 +29494,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L75:; - /* "dataRead.pyx":653 + /* "dataRead.pyx":715 * else: # swap bytes * swap_flag = 1 * if n_bytes == 16: # <<<<<<<<<<<<<< @@ -29504,7 +29504,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ switch (__pyx_v_n_bytes) { case 16: - /* "dataRead.pyx":654 + /* "dataRead.pyx":716 * swap_flag = 1 * if n_bytes == 16: * return read_cdouble(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29513,20 +29513,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":655 + /* "dataRead.pyx":717 * if n_bytes == 16: * return read_cdouble(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * elif n_bytes == 8: * return read_cfloat(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_cdouble(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 654, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_cdouble(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":653 + /* "dataRead.pyx":715 * else: # swap bytes * swap_flag = 1 * if n_bytes == 16: # <<<<<<<<<<<<<< @@ -29536,7 +29536,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ break; case 8: - /* "dataRead.pyx":657 + /* "dataRead.pyx":719 * record_byte_size, pos_byte_beg, 0) * elif n_bytes == 8: * return read_cfloat(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29545,20 +29545,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":658 + /* "dataRead.pyx":720 * elif n_bytes == 8: * return read_cfloat(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * elif n_bytes == 4: * return read_chalf(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_cfloat(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 657, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_cfloat(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 719, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":656 + /* "dataRead.pyx":718 * return read_cdouble(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) * elif n_bytes == 8: # <<<<<<<<<<<<<< @@ -29568,7 +29568,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ break; case 4: - /* "dataRead.pyx":660 + /* "dataRead.pyx":722 * record_byte_size, pos_byte_beg, 0) * elif n_bytes == 4: * return read_chalf(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29577,20 +29577,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":661 + /* "dataRead.pyx":723 * elif n_bytes == 4: * return read_chalf(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) # <<<<<<<<<<<<<< * elif n_bytes <= 4: * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) */ - __pyx_t_4 = __pyx_f_8dataRead_read_chalf(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 660, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_chalf(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":659 + /* "dataRead.pyx":721 * return read_cfloat(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) * elif n_bytes == 4: # <<<<<<<<<<<<<< @@ -29601,7 +29601,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ default: break; } - /* "dataRead.pyx":647 + /* "dataRead.pyx":709 * return read_signed_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, bit_count, bit_offset, n_bytes, 1) * elif signal_data_type in (15, 16): # complex # <<<<<<<<<<<<<< @@ -29611,7 +29611,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ goto __pyx_L4; } - /* "dataRead.pyx":662 + /* "dataRead.pyx":724 * return read_chalf(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) * elif n_bytes <= 4: # <<<<<<<<<<<<<< @@ -29621,7 +29621,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_5 = (__pyx_v_n_bytes <= 4); if (__pyx_t_5) { - /* "dataRead.pyx":664 + /* "dataRead.pyx":726 * elif n_bytes <= 4: * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29630,16 +29630,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":666 + /* "dataRead.pyx":728 * return read_unsigned_int(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) # <<<<<<<<<<<<<< * elif n_bytes <= 8: * return read_unsigned_longlong(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 666, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 728, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 666, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 728, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { __pyx_t_6 = 0; @@ -29647,20 +29647,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_6 = 1; } - /* "dataRead.pyx":664 + /* "dataRead.pyx":726 * elif n_bytes <= 4: * # VLSD/VLSC channels: record stores a uint pointer/size (signal_data_type 6-12) * return read_unsigned_int(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 664, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_int(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 726, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":662 + /* "dataRead.pyx":724 * return read_chalf(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, 0) * elif n_bytes <= 4: # <<<<<<<<<<<<<< @@ -29669,7 +29669,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":667 + /* "dataRead.pyx":729 * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) * elif n_bytes <= 8: # <<<<<<<<<<<<<< @@ -29679,7 +29679,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_5 = (__pyx_v_n_bytes <= 8); if (__pyx_t_5) { - /* "dataRead.pyx":668 + /* "dataRead.pyx":730 * 0 if byteorder == 'little' else 1) * elif n_bytes <= 8: * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29688,16 +29688,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":670 + /* "dataRead.pyx":732 * return read_unsigned_longlong(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) # <<<<<<<<<<<<<< * else: * return read_byte(bit_stream, record_format, number_of_records, */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 670, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 670, __pyx_L1_error) + __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_5) { __pyx_t_6 = 0; @@ -29705,20 +29705,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_6 = 1; } - /* "dataRead.pyx":668 + /* "dataRead.pyx":730 * 0 if byteorder == 'little' else 1) * elif n_bytes <= 8: * return read_unsigned_longlong(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) */ - __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 668, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_unsigned_longlong(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, (__pyx_v_n_bytes * 8), __pyx_v_bit_offset, __pyx_v_n_bytes, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 730, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":667 + /* "dataRead.pyx":729 * record_byte_size, pos_byte_beg, n_bytes * 8, bit_offset, n_bytes, * 0 if byteorder == 'little' else 1) * elif n_bytes <= 8: # <<<<<<<<<<<<<< @@ -29727,7 +29727,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":672 + /* "dataRead.pyx":734 * 0 if byteorder == 'little' else 1) * else: * return read_byte(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29737,14 +29737,14 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":673 + /* "dataRead.pyx":735 * else: * return read_byte(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) # <<<<<<<<<<<<<< * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ */ - __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 672, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_byte(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; @@ -29752,7 +29752,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L4:; - /* "dataRead.pyx":565 + /* "dataRead.pyx":627 * """ * cdef const char* bit_stream = PyBytes_AsString(tmp) * if not array: # <<<<<<<<<<<<<< @@ -29762,7 +29762,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ goto __pyx_L3; } - /* "dataRead.pyx":675 + /* "dataRead.pyx":737 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< @@ -29770,9 +29770,9 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ * return read_array(bit_stream, record_format, number_of_records, */ /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 675, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 675, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_little, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 737, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_3) { goto __pyx_L82_next_or; @@ -29796,16 +29796,16 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L82_next_or:; - /* "dataRead.pyx":676 + /* "dataRead.pyx":738 * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ * (byteorder == 'big' and signal_data_type in (1, 3, 5)): # <<<<<<<<<<<<<< * return read_array(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 676, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_byteorder); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 676, __pyx_L1_error) + __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_t_4, __pyx_n_u_big, Py_EQ)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 738, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { @@ -29826,7 +29826,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ __pyx_t_5 = __pyx_t_3; __pyx_L81_bool_binop_done:; - /* "dataRead.pyx":675 + /* "dataRead.pyx":737 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< @@ -29835,7 +29835,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ if (__pyx_t_5) { - /* "dataRead.pyx":677 + /* "dataRead.pyx":739 * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ * (byteorder == 'big' and signal_data_type in (1, 3, 5)): * return read_array(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29844,20 +29844,20 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":678 + /* "dataRead.pyx":740 * (byteorder == 'big' and signal_data_type in (1, 3, 5)): * return read_array(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) # <<<<<<<<<<<<<< * else: # swap bytes * return read_array(bit_stream, record_format, number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 677, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; goto __pyx_L0; - /* "dataRead.pyx":675 + /* "dataRead.pyx":737 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset) * else: # array * if (byteorder == 'little' and signal_data_type in (0, 2, 4)) or \ # <<<<<<<<<<<<<< @@ -29866,7 +29866,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ */ } - /* "dataRead.pyx":680 + /* "dataRead.pyx":742 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 0) * else: # swap bytes * return read_array(bit_stream, record_format, number_of_records, # <<<<<<<<<<<<<< @@ -29876,14 +29876,14 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":681 + /* "dataRead.pyx":743 * else: # swap bytes * return read_array(bit_stream, record_format, number_of_records, * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) # <<<<<<<<<<<<<< * * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, */ - __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 680, __pyx_L1_error) + __pyx_t_4 = __pyx_f_8dataRead_read_array(__pyx_v_bit_stream, __pyx_v_record_format, __pyx_v_number_of_records, __pyx_v_record_byte_size, __pyx_v_pos_byte_beg, __pyx_v_n_bytes, __pyx_v_bit_count, __pyx_v_bit_offset, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 742, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_r = __pyx_t_4; __pyx_t_4 = 0; @@ -29892,7 +29892,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ } __pyx_L3:; - /* "dataRead.pyx":527 + /* "dataRead.pyx":589 * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< @@ -29913,7 +29913,7 @@ static PyObject *__pyx_pf_8dataRead_2sorted_data_read(CYTHON_UNUSED PyObject *__ return __pyx_r; } -/* "dataRead.pyx":683 +/* "dataRead.pyx":745 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) * * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -29944,46 +29944,46 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b int __pyx_clineno = 0; __Pyx_RefNannySetupContext("read_half", 1); - /* "dataRead.pyx":685 + /* "dataRead.pyx":747 * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 685, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 685, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 747, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 685, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 685, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 685, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 685, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 685, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_uint16_t(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 685, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_uint16_t(__pyx_t_5, PyBUF_WRITABLE); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 747, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_buf = __pyx_t_6; __pyx_t_6.memview = NULL; __pyx_t_6.data = NULL; - /* "dataRead.pyx":687 + /* "dataRead.pyx":749 * cdef uint16_t[:] buf = np.empty(number_of_records, dtype=np.uint16) * cdef unsigned long long i * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing # <<<<<<<<<<<<<< @@ -29992,7 +29992,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b */ __pyx_v_temp_uint16 = 0; - /* "dataRead.pyx":688 + /* "dataRead.pyx":750 * cdef unsigned long long i * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -30004,7 +30004,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":689 + /* "dataRead.pyx":751 * cdef uint16_t temp_uint16 = 0 # using uint16 because float16_t is not existing * for i in range(number_of_records): * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -30013,7 +30013,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b */ (void)(memcpy((&__pyx_v_temp_uint16), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":690 + /* "dataRead.pyx":752 * for i in range(number_of_records): * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp_uint16 # <<<<<<<<<<<<<< @@ -30024,7 +30024,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b *((uint16_t *) ( /* dim=0 */ (__pyx_v_buf.data + __pyx_t_10 * __pyx_v_buf.strides[0]) )) = __pyx_v_temp_uint16; } - /* "dataRead.pyx":691 + /* "dataRead.pyx":753 * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp_uint16 * if swap == 0: # <<<<<<<<<<<<<< @@ -30034,7 +30034,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b __pyx_t_11 = (__pyx_v_swap == 0); if (__pyx_t_11) { - /* "dataRead.pyx":692 + /* "dataRead.pyx":754 * buf[i] = temp_uint16 * if swap == 0: * return np.asarray(buf).view(dtype=np.float16) # <<<<<<<<<<<<<< @@ -30042,12 +30042,12 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b * return np.asarray(buf).view(dtype=np.float16).byteswap() */ __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_asarray); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L1_error) + __pyx_t_1 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __pyx_t_12 = 0; @@ -30068,23 +30068,23 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 692, __pyx_L1_error) + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 692, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 692, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 692, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 754, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; @@ -30092,7 +30092,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b __pyx_t_2 = 0; goto __pyx_L0; - /* "dataRead.pyx":691 + /* "dataRead.pyx":753 * memcpy(&temp_uint16, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp_uint16 * if swap == 0: # <<<<<<<<<<<<<< @@ -30101,7 +30101,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b */ } - /* "dataRead.pyx":694 + /* "dataRead.pyx":756 * return np.asarray(buf).view(dtype=np.float16) * else: * return np.asarray(buf).view(dtype=np.float16).byteswap() # <<<<<<<<<<<<<< @@ -30110,12 +30110,12 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_asarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) + __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_buf, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_uint16_t, (int (*)(char *, PyObject *)) __pyx_memview_set_nn_uint16_t, 0);; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; __pyx_t_12 = 0; @@ -30136,27 +30136,27 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b __pyx_t_5 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_12, 1+__pyx_t_12); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error) + if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 694, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_np); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 694, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 694, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 694, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; @@ -30177,7 +30177,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_12, 0+__pyx_t_12); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 694, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 756, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } @@ -30186,7 +30186,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b goto __pyx_L0; } - /* "dataRead.pyx":683 + /* "dataRead.pyx":745 * record_byte_size, pos_byte_beg, n_bytes, bit_count, bit_offset, 1) * * cdef inline read_half(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -30211,7 +30211,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_half(char const *__pyx_v_b return __pyx_r; } -/* "dataRead.pyx":696 +/* "dataRead.pyx":758 * return np.asarray(buf).view(dtype=np.float16).byteswap() * * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -30248,54 +30248,54 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":699 + /* "dataRead.pyx":761 * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * # complex32 = real(f16) + imag(f16): return as (n_records, 2) float16 array * cdef np.ndarray[np.uint16_t, ndim=2] buf = np.empty((number_of_records, 2), dtype=np.uint16) # <<<<<<<<<<<<<< * cdef unsigned long long i * for i in range(number_of_records): */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error); __Pyx_INCREF(__pyx_int_2); __Pyx_GIVEREF(__pyx_int_2); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2)) __PYX_ERR(0, 699, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_2)) __PYX_ERR(0, 761, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 699, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_uint16); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 699, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_5) < 0) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 699, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 761, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 699, __pyx_L1_error) + if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 761, __pyx_L1_error) __pyx_t_6 = ((PyArrayObject *)__pyx_t_5); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_6, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES, 2, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 699, __pyx_L1_error) + __PYX_ERR(0, 761, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; __pyx_pybuffernd_buf.diminfo[1].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[1]; __pyx_pybuffernd_buf.diminfo[1].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[1]; } } @@ -30303,7 +30303,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_5); __pyx_t_5 = 0; - /* "dataRead.pyx":701 + /* "dataRead.pyx":763 * cdef np.ndarray[np.uint16_t, ndim=2] buf = np.empty((number_of_records, 2), dtype=np.uint16) * cdef unsigned long long i * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -30315,7 +30315,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":702 + /* "dataRead.pyx":764 * cdef unsigned long long i * for i in range(number_of_records): * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -30327,7 +30327,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ if (__pyx_t_11 < 0) __pyx_t_11 += __pyx_pybuffernd_buf.diminfo[1].shape; (void)(memcpy((&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_buf.diminfo[1].strides))), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":703 + /* "dataRead.pyx":765 * for i in range(number_of_records): * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) # <<<<<<<<<<<<<< @@ -30340,7 +30340,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ (void)(memcpy((&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides, __pyx_t_11, __pyx_pybuffernd_buf.diminfo[1].strides))), (&(__pyx_v_bit_stream[((__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)) + 2)])), 2)); } - /* "dataRead.pyx":704 + /* "dataRead.pyx":766 * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) * if swap == 0: # <<<<<<<<<<<<<< @@ -30350,7 +30350,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ __pyx_t_12 = (__pyx_v_swap == 0); if (__pyx_t_12) { - /* "dataRead.pyx":705 + /* "dataRead.pyx":767 * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) * if swap == 0: * return buf.view(dtype=np.float16) # <<<<<<<<<<<<<< @@ -30358,18 +30358,18 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ * return buf.view(dtype=np.float16).byteswap() */ __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 705, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 767, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 705, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 767, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 767, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 705, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 705, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_2) < 0) __PYX_ERR(0, 767, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 705, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 767, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; @@ -30377,7 +30377,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ __pyx_t_2 = 0; goto __pyx_L0; - /* "dataRead.pyx":704 + /* "dataRead.pyx":766 * memcpy(&buf[i, 0], &bit_stream[pos_byte_beg + record_byte_size * i], 2) * memcpy(&buf[i, 1], &bit_stream[pos_byte_beg + record_byte_size * i + 2], 2) * if swap == 0: # <<<<<<<<<<<<<< @@ -30386,7 +30386,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ */ } - /* "dataRead.pyx":707 + /* "dataRead.pyx":769 * return buf.view(dtype=np.float16) * else: * return buf.view(dtype=np.float16).byteswap() # <<<<<<<<<<<<<< @@ -30395,22 +30395,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float16); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 707, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 707, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 707, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_byteswap); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_4 = NULL; @@ -30431,7 +30431,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ PyObject *__pyx_callargs[2] = {__pyx_t_4, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_13, 0+__pyx_t_13); __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 707, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 769, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } @@ -30440,7 +30440,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ goto __pyx_L0; } - /* "dataRead.pyx":696 + /* "dataRead.pyx":758 * return np.asarray(buf).view(dtype=np.float16).byteswap() * * cdef inline read_chalf(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -30473,7 +30473,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_chalf(char const *__pyx_v_ return __pyx_r; } -/* "dataRead.pyx":709 +/* "dataRead.pyx":771 * return buf.view(dtype=np.float16).byteswap() * * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -30509,40 +30509,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":711 + /* "dataRead.pyx":773 * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef float temp_float = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 711, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 773, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 773, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 711, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 773, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 711, __pyx_L1_error) + __PYX_ERR(0, 773, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -30550,7 +30550,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":713 + /* "dataRead.pyx":775 * cdef np.ndarray[np.float32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef float temp_float = 0 # <<<<<<<<<<<<<< @@ -30559,7 +30559,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ */ __pyx_v_temp_float = 0.0; - /* "dataRead.pyx":714 + /* "dataRead.pyx":776 * cdef unsigned long long i * cdef float temp_float = 0 * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -30571,7 +30571,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":715 + /* "dataRead.pyx":777 * cdef float temp_float = 0 * for i in range(number_of_records): * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< @@ -30580,7 +30580,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ */ (void)(memcpy((&__pyx_v_temp_float), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); - /* "dataRead.pyx":716 + /* "dataRead.pyx":778 * for i in range(number_of_records): * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp_float # <<<<<<<<<<<<<< @@ -30591,7 +30591,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_float; } - /* "dataRead.pyx":717 + /* "dataRead.pyx":779 * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp_float * if swap == 0: # <<<<<<<<<<<<<< @@ -30601,7 +30601,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ __pyx_t_10 = (__pyx_v_swap == 0); if (__pyx_t_10) { - /* "dataRead.pyx":718 + /* "dataRead.pyx":780 * buf[i] = temp_float * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -30613,7 +30613,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":717 + /* "dataRead.pyx":779 * memcpy(&temp_float, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp_float * if swap == 0: # <<<<<<<<<<<<<< @@ -30622,7 +30622,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ */ } - /* "dataRead.pyx":720 + /* "dataRead.pyx":782 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -30631,7 +30631,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 720, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -30651,7 +30651,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 720, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 782, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -30660,7 +30660,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ goto __pyx_L0; } - /* "dataRead.pyx":709 + /* "dataRead.pyx":771 * return buf.view(dtype=np.float16).byteswap() * * cdef inline read_float(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -30692,7 +30692,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_float(char const *__pyx_v_ return __pyx_r; } -/* "dataRead.pyx":722 +/* "dataRead.pyx":784 * return buf.byteswap() * * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -30728,40 +30728,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":724 + /* "dataRead.pyx":786 * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef float complex temp_cfloat = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 724, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 724, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 724, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 724, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 724, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 786, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 786, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 724, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 786, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo___pyx_t_float_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 724, __pyx_L1_error) + __PYX_ERR(0, 786, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -30769,7 +30769,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":726 + /* "dataRead.pyx":788 * cdef np.ndarray[np.complex64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef float complex temp_cfloat = 0 # <<<<<<<<<<<<<< @@ -30778,7 +30778,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v */ __pyx_v_temp_cfloat = __pyx_t_float_complex_from_parts(0, 0); - /* "dataRead.pyx":727 + /* "dataRead.pyx":789 * cdef unsigned long long i * cdef float complex temp_cfloat = 0 * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -30790,7 +30790,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":728 + /* "dataRead.pyx":790 * cdef float complex temp_cfloat = 0 * for i in range(number_of_records): * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) # <<<<<<<<<<<<<< @@ -30799,7 +30799,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v */ (void)(memcpy((&__pyx_v_temp_cfloat), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 8)); - /* "dataRead.pyx":729 + /* "dataRead.pyx":791 * for i in range(number_of_records): * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_cfloat # <<<<<<<<<<<<<< @@ -30810,7 +30810,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v *__Pyx_BufPtrStrided1d(__pyx_t_float_complex *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_cfloat; } - /* "dataRead.pyx":730 + /* "dataRead.pyx":792 * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_cfloat * if swap == 0: # <<<<<<<<<<<<<< @@ -30820,7 +30820,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v __pyx_t_10 = (__pyx_v_swap == 0); if (__pyx_t_10) { - /* "dataRead.pyx":731 + /* "dataRead.pyx":793 * buf[i] = temp_cfloat * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -30832,7 +30832,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":730 + /* "dataRead.pyx":792 * memcpy(&temp_cfloat, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_cfloat * if swap == 0: # <<<<<<<<<<<<<< @@ -30841,7 +30841,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v */ } - /* "dataRead.pyx":733 + /* "dataRead.pyx":795 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -30850,7 +30850,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 733, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -30870,7 +30870,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 733, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 795, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -30879,7 +30879,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v goto __pyx_L0; } - /* "dataRead.pyx":722 + /* "dataRead.pyx":784 * return buf.byteswap() * * cdef inline read_cfloat(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -30911,7 +30911,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cfloat(char const *__pyx_v return __pyx_r; } -/* "dataRead.pyx":735 +/* "dataRead.pyx":797 * return buf.byteswap() * * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -30947,40 +30947,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":737 + /* "dataRead.pyx":799 * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef double temp_double = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 737, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 737, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 737, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 737, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 737, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 799, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 799, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 737, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 799, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_float64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 737, __pyx_L1_error) + __PYX_ERR(0, 799, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -30988,7 +30988,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":739 + /* "dataRead.pyx":801 * cdef np.ndarray[np.float64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef double temp_double = 0 # <<<<<<<<<<<<<< @@ -30997,7 +30997,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v */ __pyx_v_temp_double = 0.0; - /* "dataRead.pyx":740 + /* "dataRead.pyx":802 * cdef unsigned long long i * cdef double temp_double = 0 * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -31009,7 +31009,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":741 + /* "dataRead.pyx":803 * cdef double temp_double = 0 * for i in range(number_of_records): * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) # <<<<<<<<<<<<<< @@ -31018,7 +31018,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v */ (void)(memcpy((&__pyx_v_temp_double), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 8)); - /* "dataRead.pyx":742 + /* "dataRead.pyx":804 * for i in range(number_of_records): * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_double # <<<<<<<<<<<<<< @@ -31029,7 +31029,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_float64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_double; } - /* "dataRead.pyx":743 + /* "dataRead.pyx":805 * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_double * if swap == 0: # <<<<<<<<<<<<<< @@ -31039,7 +31039,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v __pyx_t_10 = (__pyx_v_swap == 0); if (__pyx_t_10) { - /* "dataRead.pyx":744 + /* "dataRead.pyx":806 * buf[i] = temp_double * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -31051,7 +31051,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":743 + /* "dataRead.pyx":805 * memcpy(&temp_double, &bit_stream[pos_byte_beg + record_byte_size * i], 8) * buf[i] = temp_double * if swap == 0: # <<<<<<<<<<<<<< @@ -31060,7 +31060,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v */ } - /* "dataRead.pyx":746 + /* "dataRead.pyx":808 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -31069,7 +31069,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 746, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -31089,7 +31089,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 746, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 808, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -31098,7 +31098,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v goto __pyx_L0; } - /* "dataRead.pyx":735 + /* "dataRead.pyx":797 * return buf.byteswap() * * cdef inline read_double(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -31130,7 +31130,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_double(char const *__pyx_v return __pyx_r; } -/* "dataRead.pyx":748 +/* "dataRead.pyx":810 * return buf.byteswap() * * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -31166,40 +31166,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":750 + /* "dataRead.pyx":812 * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned char swap): * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef double complex temp_cdouble = 0 */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 750, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 750, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 812, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 750, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 750, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 750, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 812, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 812, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 750, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 812, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo___pyx_t_double_complex, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 750, __pyx_L1_error) + __PYX_ERR(0, 812, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -31207,7 +31207,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":752 + /* "dataRead.pyx":814 * cdef np.ndarray[np.complex128_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef double complex temp_cdouble = 0 # <<<<<<<<<<<<<< @@ -31216,7 +31216,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ */ __pyx_v_temp_cdouble = __pyx_t_double_complex_from_parts(0, 0); - /* "dataRead.pyx":753 + /* "dataRead.pyx":815 * cdef unsigned long long i * cdef double complex temp_cdouble = 0 * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -31228,7 +31228,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) { __pyx_v_i = __pyx_t_8; - /* "dataRead.pyx":754 + /* "dataRead.pyx":816 * cdef double complex temp_cdouble = 0 * for i in range(number_of_records): * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) # <<<<<<<<<<<<<< @@ -31237,7 +31237,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ */ (void)(memcpy((&__pyx_v_temp_cdouble), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 16)); - /* "dataRead.pyx":755 + /* "dataRead.pyx":817 * for i in range(number_of_records): * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) * buf[i] = temp_cdouble # <<<<<<<<<<<<<< @@ -31248,7 +31248,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ *__Pyx_BufPtrStrided1d(__pyx_t_double_complex *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_9, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp_cdouble; } - /* "dataRead.pyx":756 + /* "dataRead.pyx":818 * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) * buf[i] = temp_cdouble * if swap == 0: # <<<<<<<<<<<<<< @@ -31258,7 +31258,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ __pyx_t_10 = (__pyx_v_swap == 0); if (__pyx_t_10) { - /* "dataRead.pyx":757 + /* "dataRead.pyx":819 * buf[i] = temp_cdouble * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -31270,7 +31270,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":756 + /* "dataRead.pyx":818 * memcpy(&temp_cdouble, &bit_stream[pos_byte_beg + record_byte_size * i], 16) * buf[i] = temp_cdouble * if swap == 0: # <<<<<<<<<<<<<< @@ -31279,7 +31279,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ */ } - /* "dataRead.pyx":759 + /* "dataRead.pyx":821 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -31288,7 +31288,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -31308,7 +31308,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 759, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 821, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -31317,7 +31317,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ goto __pyx_L0; } - /* "dataRead.pyx":748 + /* "dataRead.pyx":810 * return buf.byteswap() * * cdef inline read_cdouble(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -31349,7 +31349,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_cdouble(char const *__pyx_ return __pyx_r; } -/* "dataRead.pyx":761 +/* "dataRead.pyx":823 * return buf.byteswap() * * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -31385,40 +31385,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":764 + /* "dataRead.pyx":826 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset): * cdef np.ndarray[np.uint8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 764, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 764, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 826, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 826, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 764, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 826, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 764, __pyx_L1_error) + __PYX_ERR(0, 826, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -31426,7 +31426,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":766 + /* "dataRead.pyx":828 * cdef np.ndarray[np.uint8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -31435,7 +31435,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":767 + /* "dataRead.pyx":829 * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef unsigned char temp1byte = 0 # <<<<<<<<<<<<<< @@ -31444,7 +31444,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ __pyx_v_temp1byte = 0; - /* "dataRead.pyx":768 + /* "dataRead.pyx":830 * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef unsigned char temp1byte = 0 * if bit_count == 8: # <<<<<<<<<<<<<< @@ -31454,7 +31454,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_t_6 = (__pyx_v_bit_count == 8); if (__pyx_t_6) { - /* "dataRead.pyx":769 + /* "dataRead.pyx":831 * cdef unsigned char temp1byte = 0 * if bit_count == 8: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -31466,7 +31466,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":770 + /* "dataRead.pyx":832 * if bit_count == 8: * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< @@ -31475,7 +31475,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":771 + /* "dataRead.pyx":833 * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * buf[i] = temp1byte # <<<<<<<<<<<<<< @@ -31486,7 +31486,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; } - /* "dataRead.pyx":768 + /* "dataRead.pyx":830 * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef unsigned char temp1byte = 0 * if bit_count == 8: # <<<<<<<<<<<<<< @@ -31496,7 +31496,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * goto __pyx_L3; } - /* "dataRead.pyx":773 + /* "dataRead.pyx":835 * buf[i] = temp1byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -31509,7 +31509,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":774 + /* "dataRead.pyx":836 * else: * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< @@ -31518,7 +31518,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":776 + /* "dataRead.pyx":838 * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -31528,7 +31528,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":777 + /* "dataRead.pyx":839 * # right shift * if bit_offset > 0: * temp1byte = temp1byte >> bit_offset # <<<<<<<<<<<<<< @@ -31537,7 +31537,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ __pyx_v_temp1byte = (__pyx_v_temp1byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":776 + /* "dataRead.pyx":838 * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -31546,7 +31546,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ } - /* "dataRead.pyx":779 + /* "dataRead.pyx":841 * temp1byte = temp1byte >> bit_offset * # mask left part * temp1byte &= mask # <<<<<<<<<<<<<< @@ -31555,7 +31555,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * */ __pyx_v_temp1byte = (__pyx_v_temp1byte & __pyx_v_mask); - /* "dataRead.pyx":780 + /* "dataRead.pyx":842 * # mask left part * temp1byte &= mask * buf[i] = temp1byte # <<<<<<<<<<<<<< @@ -31568,7 +31568,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * } __pyx_L3:; - /* "dataRead.pyx":781 + /* "dataRead.pyx":843 * temp1byte &= mask * buf[i] = temp1byte * return buf # <<<<<<<<<<<<<< @@ -31580,7 +31580,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":761 + /* "dataRead.pyx":823 * return buf.byteswap() * * cdef inline read_unsigned_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -31612,7 +31612,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_char(char const * return __pyx_r; } -/* "dataRead.pyx":783 +/* "dataRead.pyx":845 * return buf * * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -31651,40 +31651,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":786 + /* "dataRead.pyx":848 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset): * cdef np.ndarray[np.int8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 786, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 786, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 786, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 848, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 848, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 786, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 848, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int8_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 786, __pyx_L1_error) + __PYX_ERR(0, 848, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -31692,7 +31692,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":788 + /* "dataRead.pyx":850 * cdef np.ndarray[np.int8_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -31701,7 +31701,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":789 + /* "dataRead.pyx":851 * cdef unsigned long long i * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef char temp1byte = 0 # <<<<<<<<<<<<<< @@ -31710,7 +31710,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_temp1byte = 0; - /* "dataRead.pyx":790 + /* "dataRead.pyx":852 * cdef unsigned char mask = ((1 << bit_count) - 1) * cdef char temp1byte = 0 * cdef unsigned char sign_bit = 0 # <<<<<<<<<<<<<< @@ -31719,7 +31719,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_sign_bit = 0; - /* "dataRead.pyx":791 + /* "dataRead.pyx":853 * cdef char temp1byte = 0 * cdef unsigned char sign_bit = 0 * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< @@ -31728,7 +31728,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":792 + /* "dataRead.pyx":854 * cdef unsigned char sign_bit = 0 * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< @@ -31737,7 +31737,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_sign_extend = (((1 << (8 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":793 + /* "dataRead.pyx":855 * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count * if bit_count == 8: # <<<<<<<<<<<<<< @@ -31747,7 +31747,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_t_6 = (__pyx_v_bit_count == 8); if (__pyx_t_6) { - /* "dataRead.pyx":794 + /* "dataRead.pyx":856 * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count * if bit_count == 8: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -31759,7 +31759,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":795 + /* "dataRead.pyx":857 * if bit_count == 8: * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< @@ -31768,7 +31768,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":796 + /* "dataRead.pyx":858 * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * buf[i] = temp1byte # <<<<<<<<<<<<<< @@ -31779,7 +31779,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int8_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp1byte; } - /* "dataRead.pyx":793 + /* "dataRead.pyx":855 * cdef unsigned char sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned char sign_extend = ((1 << (8 - bit_count)) - 1) << bit_count * if bit_count == 8: # <<<<<<<<<<<<<< @@ -31789,7 +31789,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ goto __pyx_L3; } - /* "dataRead.pyx":798 + /* "dataRead.pyx":860 * buf[i] = temp1byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -31802,7 +31802,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":799 + /* "dataRead.pyx":861 * else: * for i in range(number_of_records): * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) # <<<<<<<<<<<<<< @@ -31811,7 +31811,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ (void)(memcpy((&__pyx_v_temp1byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 1)); - /* "dataRead.pyx":801 + /* "dataRead.pyx":863 * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -31821,7 +31821,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":802 + /* "dataRead.pyx":864 * # right shift * if bit_offset > 0: * temp1byte = temp1byte >> bit_offset # <<<<<<<<<<<<<< @@ -31830,7 +31830,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_temp1byte = (__pyx_v_temp1byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":801 + /* "dataRead.pyx":863 * memcpy(&temp1byte, &bit_stream[pos_byte_beg + record_byte_size * i], 1) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -31839,7 +31839,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ } - /* "dataRead.pyx":804 + /* "dataRead.pyx":866 * temp1byte = temp1byte >> bit_offset * # mask left part * temp1byte &= mask # <<<<<<<<<<<<<< @@ -31848,7 +31848,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_temp1byte = (__pyx_v_temp1byte & __pyx_v_mask); - /* "dataRead.pyx":805 + /* "dataRead.pyx":867 * # mask left part * temp1byte &= mask * sign_bit = temp1byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -31857,7 +31857,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_sign_bit = (__pyx_v_temp1byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":806 + /* "dataRead.pyx":868 * temp1byte &= mask * sign_bit = temp1byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -31867,7 +31867,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":807 + /* "dataRead.pyx":869 * sign_bit = temp1byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp1byte |= sign_extend # <<<<<<<<<<<<<< @@ -31876,7 +31876,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ __pyx_v_temp1byte = (__pyx_v_temp1byte | __pyx_v_sign_extend); - /* "dataRead.pyx":806 + /* "dataRead.pyx":868 * temp1byte &= mask * sign_bit = temp1byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -31885,7 +31885,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ */ } - /* "dataRead.pyx":808 + /* "dataRead.pyx":870 * if sign_bit: # negative value, sign extend * temp1byte |= sign_extend * buf[i] = temp1byte # <<<<<<<<<<<<<< @@ -31898,7 +31898,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ } __pyx_L3:; - /* "dataRead.pyx":809 + /* "dataRead.pyx":871 * temp1byte |= sign_extend * buf[i] = temp1byte * return buf # <<<<<<<<<<<<<< @@ -31910,7 +31910,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":783 + /* "dataRead.pyx":845 * return buf * * cdef inline read_signed_char(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -31942,7 +31942,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_char(char const *__ return __pyx_r; } -/* "dataRead.pyx":811 +/* "dataRead.pyx":873 * return buf * * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -31980,40 +31980,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":814 + /* "dataRead.pyx":876 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 814, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 814, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 814, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 814, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 814, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 876, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 876, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 814, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 876, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 814, __pyx_L1_error) + __PYX_ERR(0, 876, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -32021,7 +32021,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":816 + /* "dataRead.pyx":878 * cdef np.ndarray[np.uint16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -32030,7 +32030,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":817 + /* "dataRead.pyx":879 * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) * cdef unsigned short temp2byte = 0 # <<<<<<<<<<<<<< @@ -32039,7 +32039,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ __pyx_v_temp2byte = 0; - /* "dataRead.pyx":819 + /* "dataRead.pyx":881 * cdef unsigned short temp2byte = 0 * cdef unsigned char temp[2] * if bit_count == 16: # <<<<<<<<<<<<<< @@ -32049,7 +32049,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_bit_count == 16); if (__pyx_t_6) { - /* "dataRead.pyx":820 + /* "dataRead.pyx":882 * cdef unsigned char temp[2] * if bit_count == 16: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -32061,7 +32061,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":821 + /* "dataRead.pyx":883 * if bit_count == 16: * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -32070,7 +32070,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":822 + /* "dataRead.pyx":884 * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte # <<<<<<<<<<<<<< @@ -32081,7 +32081,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":823 + /* "dataRead.pyx":885 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte * if swap == 0: # <<<<<<<<<<<<<< @@ -32091,7 +32091,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":824 + /* "dataRead.pyx":886 * buf[i] = temp2byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -32103,7 +32103,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":823 + /* "dataRead.pyx":885 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte * if swap == 0: # <<<<<<<<<<<<<< @@ -32112,7 +32112,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":826 + /* "dataRead.pyx":888 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -32121,7 +32121,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -32141,7 +32141,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 826, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 888, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -32150,7 +32150,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const goto __pyx_L0; } - /* "dataRead.pyx":819 + /* "dataRead.pyx":881 * cdef unsigned short temp2byte = 0 * cdef unsigned char temp[2] * if bit_count == 16: # <<<<<<<<<<<<<< @@ -32159,7 +32159,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":828 + /* "dataRead.pyx":890 * return buf.byteswap() * else: * if swap == 0: # <<<<<<<<<<<<<< @@ -32170,7 +32170,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":829 + /* "dataRead.pyx":891 * else: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -32182,7 +32182,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":830 + /* "dataRead.pyx":892 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -32191,7 +32191,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":832 + /* "dataRead.pyx":894 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -32201,7 +32201,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":833 + /* "dataRead.pyx":895 * # right shift * if bit_offset > 0: * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< @@ -32210,7 +32210,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":832 + /* "dataRead.pyx":894 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -32219,7 +32219,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":835 + /* "dataRead.pyx":897 * temp2byte = temp2byte >> bit_offset * # mask left part * if bit_count < 16: # <<<<<<<<<<<<<< @@ -32229,7 +32229,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_bit_count < 16); if (__pyx_t_6) { - /* "dataRead.pyx":836 + /* "dataRead.pyx":898 * # mask left part * if bit_count < 16: * temp2byte &= mask # <<<<<<<<<<<<<< @@ -32238,7 +32238,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - /* "dataRead.pyx":835 + /* "dataRead.pyx":897 * temp2byte = temp2byte >> bit_offset * # mask left part * if bit_count < 16: # <<<<<<<<<<<<<< @@ -32247,7 +32247,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":837 + /* "dataRead.pyx":899 * if bit_count < 16: * temp2byte &= mask * buf[i] = temp2byte # <<<<<<<<<<<<<< @@ -32258,7 +32258,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":828 + /* "dataRead.pyx":890 * return buf.byteswap() * else: * if swap == 0: # <<<<<<<<<<<<<< @@ -32268,7 +32268,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const goto __pyx_L7; } - /* "dataRead.pyx":839 + /* "dataRead.pyx":901 * buf[i] = temp2byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -32281,7 +32281,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":840 + /* "dataRead.pyx":902 * else: * for i in range(number_of_records): * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -32290,7 +32290,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":841 + /* "dataRead.pyx":903 * for i in range(number_of_records): * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< @@ -32299,7 +32299,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); - /* "dataRead.pyx":843 + /* "dataRead.pyx":905 * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -32309,7 +32309,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":844 + /* "dataRead.pyx":906 * # right shift * if bit_offset > 0: * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< @@ -32318,7 +32318,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":843 + /* "dataRead.pyx":905 * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -32327,7 +32327,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":846 + /* "dataRead.pyx":908 * temp2byte = temp2byte >> bit_offset * # mask left part * if bit_count < 16: # <<<<<<<<<<<<<< @@ -32337,7 +32337,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const __pyx_t_6 = (__pyx_v_bit_count < 16); if (__pyx_t_6) { - /* "dataRead.pyx":847 + /* "dataRead.pyx":909 * # mask left part * if bit_count < 16: * temp2byte &= mask # <<<<<<<<<<<<<< @@ -32346,7 +32346,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - /* "dataRead.pyx":846 + /* "dataRead.pyx":908 * temp2byte = temp2byte >> bit_offset * # mask left part * if bit_count < 16: # <<<<<<<<<<<<<< @@ -32355,7 +32355,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const */ } - /* "dataRead.pyx":848 + /* "dataRead.pyx":910 * if bit_count < 16: * temp2byte &= mask * buf[i] = temp2byte # <<<<<<<<<<<<<< @@ -32368,7 +32368,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const } __pyx_L7:; - /* "dataRead.pyx":849 + /* "dataRead.pyx":911 * temp2byte &= mask * buf[i] = temp2byte * return buf # <<<<<<<<<<<<<< @@ -32381,7 +32381,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const goto __pyx_L0; } - /* "dataRead.pyx":811 + /* "dataRead.pyx":873 * return buf * * cdef inline read_unsigned_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -32413,7 +32413,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_short(char const return __pyx_r; } -/* "dataRead.pyx":851 +/* "dataRead.pyx":913 * return buf * * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -32454,40 +32454,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":854 + /* "dataRead.pyx":916 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 854, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 854, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 854, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 854, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 916, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 916, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 854, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 916, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int16_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 854, __pyx_L1_error) + __PYX_ERR(0, 916, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -32495,7 +32495,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":856 + /* "dataRead.pyx":918 * cdef np.ndarray[np.int16_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -32504,7 +32504,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":857 + /* "dataRead.pyx":919 * cdef unsigned long long i * cdef unsigned short mask = ((1 << bit_count) - 1) * cdef short temp2byte = 0 # <<<<<<<<<<<<<< @@ -32513,7 +32513,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_temp2byte = 0; - /* "dataRead.pyx":858 + /* "dataRead.pyx":920 * cdef unsigned short mask = ((1 << bit_count) - 1) * cdef short temp2byte = 0 * cdef unsigned short sign_bit = 0 # <<<<<<<<<<<<<< @@ -32522,7 +32522,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_sign_bit = 0; - /* "dataRead.pyx":859 + /* "dataRead.pyx":921 * cdef short temp2byte = 0 * cdef unsigned short sign_bit = 0 * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< @@ -32531,7 +32531,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":860 + /* "dataRead.pyx":922 * cdef unsigned short sign_bit = 0 * cdef unsigned short sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< @@ -32540,7 +32540,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_sign_extend = (((1 << (16 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":862 + /* "dataRead.pyx":924 * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count * cdef unsigned char temp[2] * if bit_count == 16: # <<<<<<<<<<<<<< @@ -32550,7 +32550,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_t_6 = (__pyx_v_bit_count == 16); if (__pyx_t_6) { - /* "dataRead.pyx":863 + /* "dataRead.pyx":925 * cdef unsigned char temp[2] * if bit_count == 16: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -32562,7 +32562,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":864 + /* "dataRead.pyx":926 * if bit_count == 16: * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -32571,7 +32571,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":865 + /* "dataRead.pyx":927 * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte # <<<<<<<<<<<<<< @@ -32582,7 +32582,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":866 + /* "dataRead.pyx":928 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte * if swap == 0: # <<<<<<<<<<<<<< @@ -32592,7 +32592,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":867 + /* "dataRead.pyx":929 * buf[i] = temp2byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -32604,7 +32604,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":866 + /* "dataRead.pyx":928 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * buf[i] = temp2byte * if swap == 0: # <<<<<<<<<<<<<< @@ -32613,7 +32613,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ } - /* "dataRead.pyx":869 + /* "dataRead.pyx":931 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -32622,7 +32622,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 869, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -32642,7 +32642,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 869, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 931, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -32651,7 +32651,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ goto __pyx_L0; } - /* "dataRead.pyx":862 + /* "dataRead.pyx":924 * cdef unsigned short sign_extend = ((1 << (16 - bit_count)) - 1) << bit_count * cdef unsigned char temp[2] * if bit_count == 16: # <<<<<<<<<<<<<< @@ -32660,7 +32660,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ } - /* "dataRead.pyx":871 + /* "dataRead.pyx":933 * return buf.byteswap() * else: * if swap == 0: # <<<<<<<<<<<<<< @@ -32671,7 +32671,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":872 + /* "dataRead.pyx":934 * else: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -32683,7 +32683,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":873 + /* "dataRead.pyx":935 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -32692,7 +32692,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ (void)(memcpy((&__pyx_v_temp2byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":875 + /* "dataRead.pyx":937 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -32702,7 +32702,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":876 + /* "dataRead.pyx":938 * # right shift * if bit_offset > 0: * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< @@ -32711,7 +32711,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":875 + /* "dataRead.pyx":937 * memcpy(&temp2byte, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -32720,7 +32720,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ } - /* "dataRead.pyx":878 + /* "dataRead.pyx":940 * temp2byte = temp2byte >> bit_offset * # mask left part * temp2byte &= mask # <<<<<<<<<<<<<< @@ -32729,7 +32729,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - /* "dataRead.pyx":879 + /* "dataRead.pyx":941 * # mask left part * temp2byte &= mask * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -32738,7 +32738,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":880 + /* "dataRead.pyx":942 * temp2byte &= mask * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -32748,7 +32748,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":881 + /* "dataRead.pyx":943 * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp2byte |= sign_extend # <<<<<<<<<<<<<< @@ -32757,7 +32757,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); - /* "dataRead.pyx":880 + /* "dataRead.pyx":942 * temp2byte &= mask * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -32766,7 +32766,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ } - /* "dataRead.pyx":882 + /* "dataRead.pyx":944 * if sign_bit: # negative value, sign extend * temp2byte |= sign_extend * buf[i] = temp2byte # <<<<<<<<<<<<<< @@ -32777,7 +32777,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int16_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp2byte; } - /* "dataRead.pyx":871 + /* "dataRead.pyx":933 * return buf.byteswap() * else: * if swap == 0: # <<<<<<<<<<<<<< @@ -32787,7 +32787,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ goto __pyx_L7; } - /* "dataRead.pyx":884 + /* "dataRead.pyx":946 * buf[i] = temp2byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -32800,7 +32800,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":885 + /* "dataRead.pyx":947 * else: * for i in range(number_of_records): * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) # <<<<<<<<<<<<<< @@ -32809,7 +32809,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ (void)(memcpy((&__pyx_v_temp), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 2)); - /* "dataRead.pyx":886 + /* "dataRead.pyx":948 * for i in range(number_of_records): * memcpy(&temp, &bit_stream[pos_byte_beg + record_byte_size * i], 2) * temp2byte = temp[0]<<8 | temp[1] # swap bytes # <<<<<<<<<<<<<< @@ -32818,7 +32818,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_temp2byte = (((__pyx_v_temp[0]) << 8) | (__pyx_v_temp[1])); - /* "dataRead.pyx":888 + /* "dataRead.pyx":950 * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -32828,7 +32828,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":889 + /* "dataRead.pyx":951 * # right shift * if bit_offset > 0: * temp2byte = temp2byte >> bit_offset # <<<<<<<<<<<<<< @@ -32837,7 +32837,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_temp2byte = (__pyx_v_temp2byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":888 + /* "dataRead.pyx":950 * temp2byte = temp[0]<<8 | temp[1] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -32846,7 +32846,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ } - /* "dataRead.pyx":891 + /* "dataRead.pyx":953 * temp2byte = temp2byte >> bit_offset * # mask left part * temp2byte &= mask # <<<<<<<<<<<<<< @@ -32855,7 +32855,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_temp2byte = (__pyx_v_temp2byte & __pyx_v_mask); - /* "dataRead.pyx":892 + /* "dataRead.pyx":954 * # mask left part * temp2byte &= mask * sign_bit = temp2byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -32864,7 +32864,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_sign_bit = (__pyx_v_temp2byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":893 + /* "dataRead.pyx":955 * temp2byte &= mask * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -32874,7 +32874,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":894 + /* "dataRead.pyx":956 * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp2byte |= sign_extend # <<<<<<<<<<<<<< @@ -32883,7 +32883,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ __pyx_v_temp2byte = (__pyx_v_temp2byte | __pyx_v_sign_extend); - /* "dataRead.pyx":893 + /* "dataRead.pyx":955 * temp2byte &= mask * sign_bit = temp2byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -32892,7 +32892,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ */ } - /* "dataRead.pyx":895 + /* "dataRead.pyx":957 * if sign_bit: # negative value, sign extend * temp2byte |= sign_extend * buf[i] = temp2byte # <<<<<<<<<<<<<< @@ -32905,7 +32905,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ } __pyx_L7:; - /* "dataRead.pyx":896 + /* "dataRead.pyx":958 * temp2byte |= sign_extend * buf[i] = temp2byte * return buf # <<<<<<<<<<<<<< @@ -32918,7 +32918,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ goto __pyx_L0; } - /* "dataRead.pyx":851 + /* "dataRead.pyx":913 * return buf * * cdef inline read_signed_short(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -32950,7 +32950,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_short(char const *_ return __pyx_r; } -/* "dataRead.pyx":898 +/* "dataRead.pyx":960 * return buf * * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -32989,40 +32989,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":901 + /* "dataRead.pyx":963 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 901, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 901, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 901, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 901, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 901, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 963, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 963, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 901, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 963, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 901, __pyx_L1_error) + __PYX_ERR(0, 963, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -33030,7 +33030,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":903 + /* "dataRead.pyx":965 * cdef np.ndarray[np.uint32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -33039,7 +33039,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":904 + /* "dataRead.pyx":966 * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) * cdef unsigned int temp4byte = 0 # <<<<<<<<<<<<<< @@ -33048,7 +33048,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = 0; - /* "dataRead.pyx":907 + /* "dataRead.pyx":969 * cdef unsigned char temp4[4] * cdef unsigned char temp3[3] * if bit_count == 32: # <<<<<<<<<<<<<< @@ -33058,7 +33058,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_count == 32); if (__pyx_t_6) { - /* "dataRead.pyx":908 + /* "dataRead.pyx":970 * cdef unsigned char temp3[3] * if bit_count == 32: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -33070,7 +33070,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":909 + /* "dataRead.pyx":971 * if bit_count == 32: * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< @@ -33079,7 +33079,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); - /* "dataRead.pyx":910 + /* "dataRead.pyx":972 * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -33090,7 +33090,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":911 + /* "dataRead.pyx":973 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte * if swap == 0: # <<<<<<<<<<<<<< @@ -33100,7 +33100,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":912 + /* "dataRead.pyx":974 * buf[i] = temp4byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -33112,7 +33112,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":911 + /* "dataRead.pyx":973 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte * if swap == 0: # <<<<<<<<<<<<<< @@ -33121,7 +33121,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":914 + /* "dataRead.pyx":976 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -33130,7 +33130,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 914, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -33150,7 +33150,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 914, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 976, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -33159,7 +33159,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ goto __pyx_L0; } - /* "dataRead.pyx":907 + /* "dataRead.pyx":969 * cdef unsigned char temp4[4] * cdef unsigned char temp3[3] * if bit_count == 32: # <<<<<<<<<<<<<< @@ -33168,7 +33168,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":915 + /* "dataRead.pyx":977 * else: * return buf.byteswap() * elif n_bytes == 4: # <<<<<<<<<<<<<< @@ -33178,7 +33178,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_n_bytes == 4); if (__pyx_t_6) { - /* "dataRead.pyx":916 + /* "dataRead.pyx":978 * return buf.byteswap() * elif n_bytes == 4: * if swap == 0: # <<<<<<<<<<<<<< @@ -33188,7 +33188,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":917 + /* "dataRead.pyx":979 * elif n_bytes == 4: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -33200,7 +33200,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":918 + /* "dataRead.pyx":980 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -33209,7 +33209,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":920 + /* "dataRead.pyx":982 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33219,7 +33219,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":921 + /* "dataRead.pyx":983 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -33228,7 +33228,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":920 + /* "dataRead.pyx":982 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33237,7 +33237,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":923 + /* "dataRead.pyx":985 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -33247,7 +33247,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":924 + /* "dataRead.pyx":986 * # mask left part * if bit_count < 32: * temp4byte &= mask # <<<<<<<<<<<<<< @@ -33256,7 +33256,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":923 + /* "dataRead.pyx":985 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -33265,7 +33265,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":925 + /* "dataRead.pyx":987 * if bit_count < 32: * temp4byte &= mask * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -33276,7 +33276,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":916 + /* "dataRead.pyx":978 * return buf.byteswap() * elif n_bytes == 4: * if swap == 0: # <<<<<<<<<<<<<< @@ -33286,7 +33286,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ goto __pyx_L7; } - /* "dataRead.pyx":927 + /* "dataRead.pyx":989 * buf[i] = temp4byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -33299,7 +33299,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":928 + /* "dataRead.pyx":990 * else: * for i in range(number_of_records): * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -33308,7 +33308,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":929 + /* "dataRead.pyx":991 * for i in range(number_of_records): * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< @@ -33317,7 +33317,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); - /* "dataRead.pyx":931 + /* "dataRead.pyx":993 * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33327,7 +33327,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":932 + /* "dataRead.pyx":994 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -33336,7 +33336,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":931 + /* "dataRead.pyx":993 * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33345,7 +33345,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":934 + /* "dataRead.pyx":996 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -33355,7 +33355,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":935 + /* "dataRead.pyx":997 * # mask left part * if bit_count < 32: * temp4byte &= mask # <<<<<<<<<<<<<< @@ -33364,7 +33364,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":934 + /* "dataRead.pyx":996 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -33373,7 +33373,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":936 + /* "dataRead.pyx":998 * if bit_count < 32: * temp4byte &= mask * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -33386,7 +33386,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ } __pyx_L7:; - /* "dataRead.pyx":937 + /* "dataRead.pyx":999 * temp4byte &= mask * buf[i] = temp4byte * return buf # <<<<<<<<<<<<<< @@ -33398,7 +33398,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":915 + /* "dataRead.pyx":977 * else: * return buf.byteswap() * elif n_bytes == 4: # <<<<<<<<<<<<<< @@ -33407,7 +33407,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":939 + /* "dataRead.pyx":1001 * return buf * else: # on 3 bytes * if swap == 0: # <<<<<<<<<<<<<< @@ -33418,7 +33418,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":940 + /* "dataRead.pyx":1002 * else: # on 3 bytes * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -33430,7 +33430,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":941 + /* "dataRead.pyx":1003 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -33439,7 +33439,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":943 + /* "dataRead.pyx":1005 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33449,7 +33449,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":944 + /* "dataRead.pyx":1006 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -33458,7 +33458,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":943 + /* "dataRead.pyx":1005 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33467,7 +33467,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":946 + /* "dataRead.pyx":1008 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< @@ -33477,7 +33477,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_count < 24); if (__pyx_t_6) { - /* "dataRead.pyx":947 + /* "dataRead.pyx":1009 * # mask left part * if bit_count < 24: * temp4byte &= mask # <<<<<<<<<<<<<< @@ -33486,7 +33486,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":946 + /* "dataRead.pyx":1008 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< @@ -33495,7 +33495,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":948 + /* "dataRead.pyx":1010 * if bit_count < 24: * temp4byte &= mask * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -33506,7 +33506,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":939 + /* "dataRead.pyx":1001 * return buf * else: # on 3 bytes * if swap == 0: # <<<<<<<<<<<<<< @@ -33516,7 +33516,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ goto __pyx_L16; } - /* "dataRead.pyx":950 + /* "dataRead.pyx":1012 * buf[i] = temp4byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -33529,7 +33529,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":951 + /* "dataRead.pyx":1013 * else: * for i in range(number_of_records): * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -33538,7 +33538,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":952 + /* "dataRead.pyx":1014 * for i in range(number_of_records): * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< @@ -33547,7 +33547,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); - /* "dataRead.pyx":954 + /* "dataRead.pyx":1016 * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33557,7 +33557,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":955 + /* "dataRead.pyx":1017 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -33566,7 +33566,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":954 + /* "dataRead.pyx":1016 * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33575,7 +33575,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":957 + /* "dataRead.pyx":1019 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< @@ -33585,7 +33585,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ __pyx_t_6 = (__pyx_v_bit_count < 24); if (__pyx_t_6) { - /* "dataRead.pyx":958 + /* "dataRead.pyx":1020 * # mask left part * if bit_count < 24: * temp4byte &= mask # <<<<<<<<<<<<<< @@ -33594,7 +33594,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":957 + /* "dataRead.pyx":1019 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< @@ -33603,7 +33603,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ */ } - /* "dataRead.pyx":959 + /* "dataRead.pyx":1021 * if bit_count < 24: * temp4byte &= mask * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -33616,7 +33616,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ } __pyx_L16:; - /* "dataRead.pyx":960 + /* "dataRead.pyx":1022 * temp4byte &= mask * buf[i] = temp4byte * return buf # <<<<<<<<<<<<<< @@ -33629,7 +33629,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ goto __pyx_L0; } - /* "dataRead.pyx":898 + /* "dataRead.pyx":960 * return buf * * cdef inline read_unsigned_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -33661,7 +33661,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_int(char const *_ return __pyx_r; } -/* "dataRead.pyx":963 +/* "dataRead.pyx":1025 * * * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -33703,40 +33703,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":966 + /* "dataRead.pyx":1028 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 966, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 966, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1028, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 966, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 966, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 966, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1028, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1028, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 966, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1028, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int32_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 966, __pyx_L1_error) + __PYX_ERR(0, 1028, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -33744,7 +33744,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":968 + /* "dataRead.pyx":1030 * cdef np.ndarray[np.int32_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -33753,7 +33753,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":969 + /* "dataRead.pyx":1031 * cdef unsigned long long i * cdef unsigned int mask = ((1 << bit_count) - 1) * cdef int temp4byte = 0 # <<<<<<<<<<<<<< @@ -33762,7 +33762,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = 0; - /* "dataRead.pyx":970 + /* "dataRead.pyx":1032 * cdef unsigned int mask = ((1 << bit_count) - 1) * cdef int temp4byte = 0 * cdef unsigned int sign_bit = 0 # <<<<<<<<<<<<<< @@ -33771,7 +33771,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_sign_bit = 0; - /* "dataRead.pyx":971 + /* "dataRead.pyx":1033 * cdef int temp4byte = 0 * cdef unsigned int sign_bit = 0 * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< @@ -33780,7 +33780,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":972 + /* "dataRead.pyx":1034 * cdef unsigned int sign_bit = 0 * cdef unsigned int sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned int sign_extend = ((1 << (32 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< @@ -33789,7 +33789,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_sign_extend = (((1 << (32 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":975 + /* "dataRead.pyx":1037 * cdef unsigned char temp4[4] * cdef unsigned char temp3[3] * if bit_count == 32: # <<<<<<<<<<<<<< @@ -33799,7 +33799,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_count == 32); if (__pyx_t_6) { - /* "dataRead.pyx":976 + /* "dataRead.pyx":1038 * cdef unsigned char temp3[3] * if bit_count == 32: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -33811,7 +33811,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":977 + /* "dataRead.pyx":1039 * if bit_count == 32: * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) # <<<<<<<<<<<<<< @@ -33820,7 +33820,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), 4)); - /* "dataRead.pyx":978 + /* "dataRead.pyx":1040 * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -33831,7 +33831,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":979 + /* "dataRead.pyx":1041 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte * if swap == 0: # <<<<<<<<<<<<<< @@ -33841,7 +33841,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":980 + /* "dataRead.pyx":1042 * buf[i] = temp4byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -33853,7 +33853,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":979 + /* "dataRead.pyx":1041 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], 4) * buf[i] = temp4byte * if swap == 0: # <<<<<<<<<<<<<< @@ -33862,7 +33862,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":982 + /* "dataRead.pyx":1044 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -33871,7 +33871,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 982, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -33891,7 +33891,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 982, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1044, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -33900,7 +33900,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p goto __pyx_L0; } - /* "dataRead.pyx":975 + /* "dataRead.pyx":1037 * cdef unsigned char temp4[4] * cdef unsigned char temp3[3] * if bit_count == 32: # <<<<<<<<<<<<<< @@ -33909,7 +33909,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":983 + /* "dataRead.pyx":1045 * else: * return buf.byteswap() * elif n_bytes == 4: # <<<<<<<<<<<<<< @@ -33919,7 +33919,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_n_bytes == 4); if (__pyx_t_6) { - /* "dataRead.pyx":984 + /* "dataRead.pyx":1046 * return buf.byteswap() * elif n_bytes == 4: * if swap == 0: # <<<<<<<<<<<<<< @@ -33929,7 +33929,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":985 + /* "dataRead.pyx":1047 * elif n_bytes == 4: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -33941,7 +33941,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":986 + /* "dataRead.pyx":1048 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -33950,7 +33950,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":988 + /* "dataRead.pyx":1050 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33960,7 +33960,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":989 + /* "dataRead.pyx":1051 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -33969,7 +33969,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":988 + /* "dataRead.pyx":1050 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -33978,7 +33978,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":991 + /* "dataRead.pyx":1053 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -33988,7 +33988,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":992 + /* "dataRead.pyx":1054 * # mask left part * if bit_count < 32: * temp4byte &= mask # <<<<<<<<<<<<<< @@ -33997,7 +33997,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":991 + /* "dataRead.pyx":1053 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -34006,7 +34006,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":993 + /* "dataRead.pyx":1055 * if bit_count < 32: * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< @@ -34015,7 +34015,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":994 + /* "dataRead.pyx":1056 * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -34025,7 +34025,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":995 + /* "dataRead.pyx":1057 * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend * temp4byte |= sign_extend # <<<<<<<<<<<<<< @@ -34034,7 +34034,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - /* "dataRead.pyx":994 + /* "dataRead.pyx":1056 * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -34043,7 +34043,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":996 + /* "dataRead.pyx":1058 * if sign_bit: # negative value, sign extend * temp4byte |= sign_extend * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -34054,7 +34054,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":984 + /* "dataRead.pyx":1046 * return buf.byteswap() * elif n_bytes == 4: * if swap == 0: # <<<<<<<<<<<<<< @@ -34064,7 +34064,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p goto __pyx_L7; } - /* "dataRead.pyx":998 + /* "dataRead.pyx":1060 * buf[i] = temp4byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -34077,7 +34077,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":999 + /* "dataRead.pyx":1061 * else: * for i in range(number_of_records): * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -34086,7 +34086,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ (void)(memcpy((&__pyx_v_temp4), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1000 + /* "dataRead.pyx":1062 * for i in range(number_of_records): * memcpy(&temp4, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes # <<<<<<<<<<<<<< @@ -34095,7 +34095,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (((((__pyx_v_temp4[0]) << 24) | ((__pyx_v_temp4[1]) << 16)) | ((__pyx_v_temp4[2]) << 8)) | (__pyx_v_temp4[3])); - /* "dataRead.pyx":1002 + /* "dataRead.pyx":1064 * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34105,7 +34105,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1003 + /* "dataRead.pyx":1065 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -34114,7 +34114,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1002 + /* "dataRead.pyx":1064 * temp4byte = temp4[0]<<24 | temp4[1]<<16 | temp4[2]<<8 | temp4[3] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34123,7 +34123,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1005 + /* "dataRead.pyx":1067 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -34133,7 +34133,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":1006 + /* "dataRead.pyx":1068 * # mask left part * if bit_count < 32: * temp4byte &= mask # <<<<<<<<<<<<<< @@ -34142,7 +34142,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":1005 + /* "dataRead.pyx":1067 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -34151,7 +34151,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1007 + /* "dataRead.pyx":1069 * if bit_count < 32: * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< @@ -34160,7 +34160,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1008 + /* "dataRead.pyx":1070 * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -34170,7 +34170,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1009 + /* "dataRead.pyx":1071 * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend * temp4byte |= sign_extend # <<<<<<<<<<<<<< @@ -34179,7 +34179,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1008 + /* "dataRead.pyx":1070 * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -34188,7 +34188,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1010 + /* "dataRead.pyx":1072 * if sign_bit: # negative value, sign extend * temp4byte |= sign_extend * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -34201,7 +34201,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p } __pyx_L7:; - /* "dataRead.pyx":1011 + /* "dataRead.pyx":1073 * temp4byte |= sign_extend * buf[i] = temp4byte * return buf # <<<<<<<<<<<<<< @@ -34213,7 +34213,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":983 + /* "dataRead.pyx":1045 * else: * return buf.byteswap() * elif n_bytes == 4: # <<<<<<<<<<<<<< @@ -34222,7 +34222,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1013 + /* "dataRead.pyx":1075 * return buf * else: # on 3 bytes * if swap == 0: # <<<<<<<<<<<<<< @@ -34233,7 +34233,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1014 + /* "dataRead.pyx":1076 * else: # on 3 bytes * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -34245,7 +34245,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1015 + /* "dataRead.pyx":1077 * if swap == 0: * for i in range(number_of_records): * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF # <<<<<<<<<<<<<< @@ -34254,7 +34254,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = 0; - /* "dataRead.pyx":1016 + /* "dataRead.pyx":1078 * for i in range(number_of_records): * temp4byte = 0 # must zero high byte: memcpy only writes n_bytes=3, and sign_extend may have set it to 0xFF * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -34263,7 +34263,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ (void)(memcpy((&__pyx_v_temp4byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1018 + /* "dataRead.pyx":1080 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34273,7 +34273,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1019 + /* "dataRead.pyx":1081 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -34282,7 +34282,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1018 + /* "dataRead.pyx":1080 * memcpy(&temp4byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34291,7 +34291,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1021 + /* "dataRead.pyx":1083 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< @@ -34301,7 +34301,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_count < 24); if (__pyx_t_6) { - /* "dataRead.pyx":1022 + /* "dataRead.pyx":1084 * # mask left part * if bit_count < 24: * temp4byte &= mask # <<<<<<<<<<<<<< @@ -34310,7 +34310,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":1021 + /* "dataRead.pyx":1083 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< @@ -34319,7 +34319,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1023 + /* "dataRead.pyx":1085 * if bit_count < 24: * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< @@ -34328,7 +34328,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1024 + /* "dataRead.pyx":1086 * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -34338,7 +34338,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1025 + /* "dataRead.pyx":1087 * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend * temp4byte |= sign_extend # <<<<<<<<<<<<<< @@ -34347,7 +34347,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1024 + /* "dataRead.pyx":1086 * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -34356,7 +34356,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1026 + /* "dataRead.pyx":1088 * if sign_bit: # negative value, sign extend * temp4byte |= sign_extend * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -34367,7 +34367,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp4byte; } - /* "dataRead.pyx":1013 + /* "dataRead.pyx":1075 * return buf * else: # on 3 bytes * if swap == 0: # <<<<<<<<<<<<<< @@ -34377,7 +34377,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p goto __pyx_L18; } - /* "dataRead.pyx":1028 + /* "dataRead.pyx":1090 * buf[i] = temp4byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -34390,7 +34390,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1029 + /* "dataRead.pyx":1091 * else: * for i in range(number_of_records): * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -34399,7 +34399,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ (void)(memcpy((&__pyx_v_temp3), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1030 + /* "dataRead.pyx":1092 * for i in range(number_of_records): * memcpy(&temp3, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes # <<<<<<<<<<<<<< @@ -34408,7 +34408,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = ((((__pyx_v_temp3[0]) << 16) | ((__pyx_v_temp3[1]) << 8)) | (__pyx_v_temp3[2])); - /* "dataRead.pyx":1032 + /* "dataRead.pyx":1094 * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34418,7 +34418,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1033 + /* "dataRead.pyx":1095 * # right shift * if bit_offset > 0: * temp4byte = temp4byte >> bit_offset # <<<<<<<<<<<<<< @@ -34427,7 +34427,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1032 + /* "dataRead.pyx":1094 * temp4byte = temp3[0]<<16 | temp3[1]<<8 | temp3[2] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34436,7 +34436,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1035 + /* "dataRead.pyx":1097 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< @@ -34446,7 +34446,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_bit_count < 24); if (__pyx_t_6) { - /* "dataRead.pyx":1036 + /* "dataRead.pyx":1098 * # mask left part * if bit_count < 24: * temp4byte &= mask # <<<<<<<<<<<<<< @@ -34455,7 +34455,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte & __pyx_v_mask); - /* "dataRead.pyx":1035 + /* "dataRead.pyx":1097 * temp4byte = temp4byte >> bit_offset * # mask left part * if bit_count < 24: # <<<<<<<<<<<<<< @@ -34464,7 +34464,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1037 + /* "dataRead.pyx":1099 * if bit_count < 24: * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed # <<<<<<<<<<<<<< @@ -34473,7 +34473,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_sign_bit = (__pyx_v_temp4byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1038 + /* "dataRead.pyx":1100 * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -34483,7 +34483,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1039 + /* "dataRead.pyx":1101 * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend * temp4byte |= sign_extend # <<<<<<<<<<<<<< @@ -34492,7 +34492,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ __pyx_v_temp4byte = (__pyx_v_temp4byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1038 + /* "dataRead.pyx":1100 * temp4byte &= mask * sign_bit = temp4byte & sign_bit_mask # assumes return in little endian, to be reviewed * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -34501,7 +34501,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p */ } - /* "dataRead.pyx":1040 + /* "dataRead.pyx":1102 * if sign_bit: # negative value, sign extend * temp4byte |= sign_extend * buf[i] = temp4byte # <<<<<<<<<<<<<< @@ -34514,7 +34514,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p } __pyx_L18:; - /* "dataRead.pyx":1041 + /* "dataRead.pyx":1103 * temp4byte |= sign_extend * buf[i] = temp4byte * return buf # <<<<<<<<<<<<<< @@ -34527,7 +34527,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p goto __pyx_L0; } - /* "dataRead.pyx":963 + /* "dataRead.pyx":1025 * * * cdef inline read_signed_int(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -34559,7 +34559,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_int(char const *__p return __pyx_r; } -/* "dataRead.pyx":1043 +/* "dataRead.pyx":1105 * return buf * * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -34600,40 +34600,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":1046 + /* "dataRead.pyx":1108 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1046, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1046, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1046, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1046, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1046, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1108, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1108, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1046, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1108, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_uint64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 1046, __pyx_L1_error) + __PYX_ERR(0, 1108, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -34641,7 +34641,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1048 + /* "dataRead.pyx":1110 * cdef np.ndarray[np.uint64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -34650,7 +34650,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":1049 + /* "dataRead.pyx":1111 * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) * cdef unsigned long long temp8byte = 0 # <<<<<<<<<<<<<< @@ -34659,7 +34659,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = 0; - /* "dataRead.pyx":1054 + /* "dataRead.pyx":1116 * cdef unsigned char temp6[6] * cdef unsigned char temp5[5] * if bit_count == 64: # <<<<<<<<<<<<<< @@ -34669,7 +34669,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count == 64); if (__pyx_t_6) { - /* "dataRead.pyx":1055 + /* "dataRead.pyx":1117 * cdef unsigned char temp5[5] * if bit_count == 64: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -34681,7 +34681,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1056 + /* "dataRead.pyx":1118 * if bit_count == 64: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -34690,7 +34690,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1057 + /* "dataRead.pyx":1119 * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -34701,7 +34701,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1058 + /* "dataRead.pyx":1120 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte * if swap == 0: # <<<<<<<<<<<<<< @@ -34711,7 +34711,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1059 + /* "dataRead.pyx":1121 * buf[i] = temp8byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -34723,7 +34723,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":1058 + /* "dataRead.pyx":1120 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte * if swap == 0: # <<<<<<<<<<<<<< @@ -34732,7 +34732,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1061 + /* "dataRead.pyx":1123 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -34741,7 +34741,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1061, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -34761,7 +34761,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1061, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -34770,7 +34770,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L0; } - /* "dataRead.pyx":1054 + /* "dataRead.pyx":1116 * cdef unsigned char temp6[6] * cdef unsigned char temp5[5] * if bit_count == 64: # <<<<<<<<<<<<<< @@ -34779,7 +34779,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1062 + /* "dataRead.pyx":1124 * else: * return buf.byteswap() * elif n_bytes == 8: # <<<<<<<<<<<<<< @@ -34789,7 +34789,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_n_bytes == 8); if (__pyx_t_6) { - /* "dataRead.pyx":1063 + /* "dataRead.pyx":1125 * return buf.byteswap() * elif n_bytes == 8: * if swap == 0: # <<<<<<<<<<<<<< @@ -34799,7 +34799,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1064 + /* "dataRead.pyx":1126 * elif n_bytes == 8: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -34811,7 +34811,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1065 + /* "dataRead.pyx":1127 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -34820,7 +34820,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1067 + /* "dataRead.pyx":1129 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34830,7 +34830,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1068 + /* "dataRead.pyx":1130 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -34839,7 +34839,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1067 + /* "dataRead.pyx":1129 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34848,7 +34848,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1070 + /* "dataRead.pyx":1132 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< @@ -34858,7 +34858,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count < 64); if (__pyx_t_6) { - /* "dataRead.pyx":1071 + /* "dataRead.pyx":1133 * # mask left part * if bit_count < 64: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -34867,7 +34867,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1070 + /* "dataRead.pyx":1132 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< @@ -34876,7 +34876,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1072 + /* "dataRead.pyx":1134 * if bit_count < 64: * temp8byte &= mask * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -34887,7 +34887,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1063 + /* "dataRead.pyx":1125 * return buf.byteswap() * elif n_bytes == 8: * if swap == 0: # <<<<<<<<<<<<<< @@ -34897,7 +34897,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L7; } - /* "dataRead.pyx":1074 + /* "dataRead.pyx":1136 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -34910,7 +34910,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1075 + /* "dataRead.pyx":1137 * else: * for i in range(number_of_records): * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -34919,7 +34919,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1078 + /* "dataRead.pyx":1140 * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ * temp8[2]<<40 | temp8[3]<<32 | \ * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< @@ -34928,7 +34928,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); - /* "dataRead.pyx":1080 + /* "dataRead.pyx":1142 * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34938,7 +34938,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1081 + /* "dataRead.pyx":1143 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -34947,7 +34947,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1080 + /* "dataRead.pyx":1142 * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -34956,7 +34956,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1083 + /* "dataRead.pyx":1145 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< @@ -34966,7 +34966,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count < 64); if (__pyx_t_6) { - /* "dataRead.pyx":1084 + /* "dataRead.pyx":1146 * # mask left part * if bit_count < 64: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -34975,7 +34975,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1083 + /* "dataRead.pyx":1145 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< @@ -34984,7 +34984,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1085 + /* "dataRead.pyx":1147 * if bit_count < 64: * temp8byte &= mask * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -34997,7 +34997,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con } __pyx_L7:; - /* "dataRead.pyx":1062 + /* "dataRead.pyx":1124 * else: * return buf.byteswap() * elif n_bytes == 8: # <<<<<<<<<<<<<< @@ -35007,7 +35007,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L3; } - /* "dataRead.pyx":1086 + /* "dataRead.pyx":1148 * temp8byte &= mask * buf[i] = temp8byte * elif n_bytes == 7: # <<<<<<<<<<<<<< @@ -35017,7 +35017,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_n_bytes == 7); if (__pyx_t_6) { - /* "dataRead.pyx":1087 + /* "dataRead.pyx":1149 * buf[i] = temp8byte * elif n_bytes == 7: * if swap == 0: # <<<<<<<<<<<<<< @@ -35027,7 +35027,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1088 + /* "dataRead.pyx":1150 * elif n_bytes == 7: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -35039,7 +35039,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1089 + /* "dataRead.pyx":1151 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -35048,7 +35048,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1091 + /* "dataRead.pyx":1153 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35058,7 +35058,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1092 + /* "dataRead.pyx":1154 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -35067,7 +35067,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1091 + /* "dataRead.pyx":1153 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35076,7 +35076,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1094 + /* "dataRead.pyx":1156 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 56: # <<<<<<<<<<<<<< @@ -35086,7 +35086,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count < 56); if (__pyx_t_6) { - /* "dataRead.pyx":1095 + /* "dataRead.pyx":1157 * # mask left part * if bit_count < 56: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -35095,7 +35095,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1094 + /* "dataRead.pyx":1156 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 56: # <<<<<<<<<<<<<< @@ -35104,7 +35104,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1096 + /* "dataRead.pyx":1158 * if bit_count < 56: * temp8byte &= mask * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -35115,7 +35115,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1087 + /* "dataRead.pyx":1149 * buf[i] = temp8byte * elif n_bytes == 7: * if swap == 0: # <<<<<<<<<<<<<< @@ -35125,7 +35125,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L16; } - /* "dataRead.pyx":1098 + /* "dataRead.pyx":1160 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -35138,7 +35138,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1099 + /* "dataRead.pyx":1161 * else: * for i in range(number_of_records): * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -35147,7 +35147,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1101 + /* "dataRead.pyx":1163 * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< @@ -35156,7 +35156,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); - /* "dataRead.pyx":1103 + /* "dataRead.pyx":1165 * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35166,7 +35166,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1104 + /* "dataRead.pyx":1166 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -35175,7 +35175,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1103 + /* "dataRead.pyx":1165 * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35184,7 +35184,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1106 + /* "dataRead.pyx":1168 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 56: # <<<<<<<<<<<<<< @@ -35194,7 +35194,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count < 56); if (__pyx_t_6) { - /* "dataRead.pyx":1107 + /* "dataRead.pyx":1169 * # mask left part * if bit_count < 56: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -35203,7 +35203,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1106 + /* "dataRead.pyx":1168 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 56: # <<<<<<<<<<<<<< @@ -35212,7 +35212,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1108 + /* "dataRead.pyx":1170 * if bit_count < 56: * temp8byte &= mask * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -35225,7 +35225,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con } __pyx_L16:; - /* "dataRead.pyx":1086 + /* "dataRead.pyx":1148 * temp8byte &= mask * buf[i] = temp8byte * elif n_bytes == 7: # <<<<<<<<<<<<<< @@ -35235,7 +35235,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L3; } - /* "dataRead.pyx":1109 + /* "dataRead.pyx":1171 * temp8byte &= mask * buf[i] = temp8byte * elif n_bytes == 6: # <<<<<<<<<<<<<< @@ -35245,7 +35245,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_n_bytes == 6); if (__pyx_t_6) { - /* "dataRead.pyx":1110 + /* "dataRead.pyx":1172 * buf[i] = temp8byte * elif n_bytes == 6: * if swap == 0: # <<<<<<<<<<<<<< @@ -35255,7 +35255,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1111 + /* "dataRead.pyx":1173 * elif n_bytes == 6: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -35267,7 +35267,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1112 + /* "dataRead.pyx":1174 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -35276,7 +35276,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1114 + /* "dataRead.pyx":1176 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35286,7 +35286,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1115 + /* "dataRead.pyx":1177 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -35295,7 +35295,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1114 + /* "dataRead.pyx":1176 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35304,7 +35304,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1117 + /* "dataRead.pyx":1179 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 48: # <<<<<<<<<<<<<< @@ -35314,7 +35314,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count < 48); if (__pyx_t_6) { - /* "dataRead.pyx":1118 + /* "dataRead.pyx":1180 * # mask left part * if bit_count < 48: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -35323,7 +35323,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1117 + /* "dataRead.pyx":1179 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 48: # <<<<<<<<<<<<<< @@ -35332,7 +35332,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1119 + /* "dataRead.pyx":1181 * if bit_count < 48: * temp8byte &= mask * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -35343,7 +35343,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1110 + /* "dataRead.pyx":1172 * buf[i] = temp8byte * elif n_bytes == 6: * if swap == 0: # <<<<<<<<<<<<<< @@ -35353,7 +35353,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L25; } - /* "dataRead.pyx":1121 + /* "dataRead.pyx":1183 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -35366,7 +35366,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1122 + /* "dataRead.pyx":1184 * else: * for i in range(number_of_records): * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -35375,7 +35375,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1124 + /* "dataRead.pyx":1186 * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< @@ -35384,7 +35384,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); - /* "dataRead.pyx":1126 + /* "dataRead.pyx":1188 * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35394,7 +35394,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1127 + /* "dataRead.pyx":1189 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -35403,7 +35403,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1126 + /* "dataRead.pyx":1188 * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35412,7 +35412,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1129 + /* "dataRead.pyx":1191 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 48: # <<<<<<<<<<<<<< @@ -35422,7 +35422,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count < 48); if (__pyx_t_6) { - /* "dataRead.pyx":1130 + /* "dataRead.pyx":1192 * # mask left part * if bit_count < 48: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -35431,7 +35431,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1129 + /* "dataRead.pyx":1191 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 48: # <<<<<<<<<<<<<< @@ -35440,7 +35440,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1131 + /* "dataRead.pyx":1193 * if bit_count < 48: * temp8byte &= mask * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -35453,7 +35453,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con } __pyx_L25:; - /* "dataRead.pyx":1109 + /* "dataRead.pyx":1171 * temp8byte &= mask * buf[i] = temp8byte * elif n_bytes == 6: # <<<<<<<<<<<<<< @@ -35463,7 +35463,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L3; } - /* "dataRead.pyx":1132 + /* "dataRead.pyx":1194 * temp8byte &= mask * buf[i] = temp8byte * elif n_bytes == 5: # <<<<<<<<<<<<<< @@ -35473,7 +35473,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_n_bytes == 5); if (__pyx_t_6) { - /* "dataRead.pyx":1133 + /* "dataRead.pyx":1195 * buf[i] = temp8byte * elif n_bytes == 5: * if swap == 0: # <<<<<<<<<<<<<< @@ -35483,7 +35483,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1134 + /* "dataRead.pyx":1196 * elif n_bytes == 5: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -35495,7 +35495,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1135 + /* "dataRead.pyx":1197 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -35504,7 +35504,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1137 + /* "dataRead.pyx":1199 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35514,7 +35514,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1138 + /* "dataRead.pyx":1200 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -35523,7 +35523,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1137 + /* "dataRead.pyx":1199 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35532,7 +35532,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1140 + /* "dataRead.pyx":1202 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -35542,7 +35542,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":1141 + /* "dataRead.pyx":1203 * # mask left part * if bit_count < 32: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -35551,7 +35551,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1140 + /* "dataRead.pyx":1202 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -35560,7 +35560,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1142 + /* "dataRead.pyx":1204 * if bit_count < 32: * temp8byte &= mask * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -35571,7 +35571,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_uint64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1133 + /* "dataRead.pyx":1195 * buf[i] = temp8byte * elif n_bytes == 5: * if swap == 0: # <<<<<<<<<<<<<< @@ -35581,7 +35581,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con goto __pyx_L34; } - /* "dataRead.pyx":1144 + /* "dataRead.pyx":1206 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -35594,7 +35594,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1145 + /* "dataRead.pyx":1207 * else: * for i in range(number_of_records): * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -35603,7 +35603,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1147 + /* "dataRead.pyx":1209 * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< @@ -35612,7 +35612,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); - /* "dataRead.pyx":1149 + /* "dataRead.pyx":1211 * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35622,7 +35622,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1150 + /* "dataRead.pyx":1212 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -35631,7 +35631,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1149 + /* "dataRead.pyx":1211 * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -35640,7 +35640,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1152 + /* "dataRead.pyx":1214 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -35650,7 +35650,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_t_6 = (__pyx_v_bit_count < 32); if (__pyx_t_6) { - /* "dataRead.pyx":1153 + /* "dataRead.pyx":1215 * # mask left part * if bit_count < 32: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -35659,7 +35659,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1152 + /* "dataRead.pyx":1214 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 32: # <<<<<<<<<<<<<< @@ -35668,7 +35668,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con */ } - /* "dataRead.pyx":1154 + /* "dataRead.pyx":1216 * if bit_count < 32: * temp8byte &= mask * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -35681,7 +35681,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con } __pyx_L34:; - /* "dataRead.pyx":1132 + /* "dataRead.pyx":1194 * temp8byte &= mask * buf[i] = temp8byte * elif n_bytes == 5: # <<<<<<<<<<<<<< @@ -35691,7 +35691,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con } __pyx_L3:; - /* "dataRead.pyx":1155 + /* "dataRead.pyx":1217 * temp8byte &= mask * buf[i] = temp8byte * return buf # <<<<<<<<<<<<<< @@ -35703,7 +35703,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":1043 + /* "dataRead.pyx":1105 * return buf * * cdef inline read_unsigned_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -35735,7 +35735,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_unsigned_longlong(char con return __pyx_r; } -/* "dataRead.pyx":1157 +/* "dataRead.pyx":1219 * return buf * * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -35779,40 +35779,40 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_pybuffernd_buf.data = NULL; __pyx_pybuffernd_buf.rcbuffer = &__pyx_pybuffer_buf; - /* "dataRead.pyx":1160 + /* "dataRead.pyx":1222 * unsigned long record_byte_size, unsigned long pos_byte_beg, * unsigned long bit_count, unsigned char bit_offset, unsigned long n_bytes, unsigned char swap): * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1160, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1160, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1222, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1160, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1160, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1222, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1222, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1160, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1222, __pyx_L1_error) __pyx_t_5 = ((PyArrayObject *)__pyx_t_4); { __Pyx_BufFmt_StackElem __pyx_stack[1]; if (unlikely(__Pyx_GetBufferAndValidate(&__pyx_pybuffernd_buf.rcbuffer->pybuffer, (PyObject*)__pyx_t_5, &__Pyx_TypeInfo_nn___pyx_t_5numpy_int64_t, PyBUF_FORMAT| PyBUF_STRIDES| PyBUF_WRITABLE, 1, 0, __pyx_stack) == -1)) { __pyx_v_buf = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None); __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf = NULL; - __PYX_ERR(0, 1160, __pyx_L1_error) + __PYX_ERR(0, 1222, __pyx_L1_error) } else {__pyx_pybuffernd_buf.diminfo[0].strides = __pyx_pybuffernd_buf.rcbuffer->pybuffer.strides[0]; __pyx_pybuffernd_buf.diminfo[0].shape = __pyx_pybuffernd_buf.rcbuffer->pybuffer.shape[0]; } } @@ -35820,7 +35820,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1162 + /* "dataRead.pyx":1224 * cdef np.ndarray[np.int64_t] buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) # <<<<<<<<<<<<<< @@ -35829,7 +35829,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_mask = ((1 << __pyx_v_bit_count) - 1); - /* "dataRead.pyx":1163 + /* "dataRead.pyx":1225 * cdef unsigned long long i * cdef unsigned long long mask = ((1 << bit_count) - 1) * cdef long long temp8byte = 0 # <<<<<<<<<<<<<< @@ -35838,7 +35838,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = 0; - /* "dataRead.pyx":1164 + /* "dataRead.pyx":1226 * cdef unsigned long long mask = ((1 << bit_count) - 1) * cdef long long temp8byte = 0 * cdef unsigned long sign_bit = 0 # <<<<<<<<<<<<<< @@ -35847,7 +35847,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = 0; - /* "dataRead.pyx":1165 + /* "dataRead.pyx":1227 * cdef long long temp8byte = 0 * cdef unsigned long sign_bit = 0 * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) # <<<<<<<<<<<<<< @@ -35856,7 +35856,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit_mask = (1 << (__pyx_v_bit_count - 1)); - /* "dataRead.pyx":1166 + /* "dataRead.pyx":1228 * cdef unsigned long sign_bit = 0 * cdef unsigned long long sign_bit_mask = (1 << (bit_count-1)) * cdef unsigned long long sign_extend = ((1 << (64 - bit_count)) - 1) << bit_count # <<<<<<<<<<<<<< @@ -35865,7 +35865,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_extend = (((1 << (64 - __pyx_v_bit_count)) - 1) << __pyx_v_bit_count); - /* "dataRead.pyx":1171 + /* "dataRead.pyx":1233 * cdef unsigned char temp6[6] * cdef unsigned char temp5[5] * if bit_count == 64: # <<<<<<<<<<<<<< @@ -35875,7 +35875,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count == 64); if (__pyx_t_6) { - /* "dataRead.pyx":1172 + /* "dataRead.pyx":1234 * cdef unsigned char temp5[5] * if bit_count == 64: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -35887,7 +35887,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1173 + /* "dataRead.pyx":1235 * if bit_count == 64: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -35896,7 +35896,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1174 + /* "dataRead.pyx":1236 * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -35907,7 +35907,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1175 + /* "dataRead.pyx":1237 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte * if swap == 0: # <<<<<<<<<<<<<< @@ -35917,7 +35917,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1176 + /* "dataRead.pyx":1238 * buf[i] = temp8byte * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -35929,7 +35929,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":1175 + /* "dataRead.pyx":1237 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * buf[i] = temp8byte * if swap == 0: # <<<<<<<<<<<<<< @@ -35938,7 +35938,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1178 + /* "dataRead.pyx":1240 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -35947,7 +35947,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = NULL; __pyx_t_11 = 0; @@ -35967,7 +35967,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_1, __pyx_callargs+1-__pyx_t_11, 0+__pyx_t_11); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1178, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1240, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } @@ -35976,7 +35976,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L0; } - /* "dataRead.pyx":1171 + /* "dataRead.pyx":1233 * cdef unsigned char temp6[6] * cdef unsigned char temp5[5] * if bit_count == 64: # <<<<<<<<<<<<<< @@ -35985,7 +35985,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1179 + /* "dataRead.pyx":1241 * else: * return buf.byteswap() * elif n_bytes == 8: # <<<<<<<<<<<<<< @@ -35995,7 +35995,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_n_bytes == 8); if (__pyx_t_6) { - /* "dataRead.pyx":1180 + /* "dataRead.pyx":1242 * return buf.byteswap() * elif n_bytes == 8: * if swap == 0: # <<<<<<<<<<<<<< @@ -36005,7 +36005,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1181 + /* "dataRead.pyx":1243 * elif n_bytes == 8: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -36017,7 +36017,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1182 + /* "dataRead.pyx":1244 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -36026,7 +36026,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1184 + /* "dataRead.pyx":1246 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36036,7 +36036,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1185 + /* "dataRead.pyx":1247 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -36045,7 +36045,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1184 + /* "dataRead.pyx":1246 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36054,7 +36054,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1187 + /* "dataRead.pyx":1249 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< @@ -36064,7 +36064,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count < 64); if (__pyx_t_6) { - /* "dataRead.pyx":1188 + /* "dataRead.pyx":1250 * # mask left part * if bit_count < 64: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -36073,7 +36073,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1187 + /* "dataRead.pyx":1249 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< @@ -36082,7 +36082,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1189 + /* "dataRead.pyx":1251 * if bit_count < 64: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -36091,7 +36091,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1190 + /* "dataRead.pyx":1252 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36101,7 +36101,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1191 + /* "dataRead.pyx":1253 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -36110,7 +36110,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1190 + /* "dataRead.pyx":1252 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36119,7 +36119,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1192 + /* "dataRead.pyx":1254 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -36130,7 +36130,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1180 + /* "dataRead.pyx":1242 * return buf.byteswap() * elif n_bytes == 8: * if swap == 0: # <<<<<<<<<<<<<< @@ -36140,7 +36140,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L7; } - /* "dataRead.pyx":1194 + /* "dataRead.pyx":1256 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -36153,7 +36153,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1195 + /* "dataRead.pyx":1257 * else: * for i in range(number_of_records): * memcpy(&temp8, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -36162,7 +36162,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp8), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1198 + /* "dataRead.pyx":1260 * temp8byte = temp8[0]<<56 | temp8[1]<<48 | \ * temp8[2]<<40 | temp8[3]<<32 | \ * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes # <<<<<<<<<<<<<< @@ -36171,7 +36171,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = ((((((((((uint64_t)(__pyx_v_temp8[0])) << 56) | (((uint64_t)(__pyx_v_temp8[1])) << 48)) | (((uint64_t)(__pyx_v_temp8[2])) << 40)) | (((uint64_t)(__pyx_v_temp8[3])) << 32)) | ((__pyx_v_temp8[4]) << 24)) | ((__pyx_v_temp8[5]) << 16)) | ((__pyx_v_temp8[6]) << 8)) | (__pyx_v_temp8[7])); - /* "dataRead.pyx":1200 + /* "dataRead.pyx":1262 * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36181,7 +36181,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1201 + /* "dataRead.pyx":1263 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -36190,7 +36190,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1200 + /* "dataRead.pyx":1262 * temp8[4]<<24 | temp8[5]<<16 | temp8[6]<<8 | temp8[7] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36199,7 +36199,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1203 + /* "dataRead.pyx":1265 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< @@ -36209,7 +36209,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count < 64); if (__pyx_t_6) { - /* "dataRead.pyx":1204 + /* "dataRead.pyx":1266 * # mask left part * if bit_count < 64: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -36218,7 +36218,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1203 + /* "dataRead.pyx":1265 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 64: # <<<<<<<<<<<<<< @@ -36227,7 +36227,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1205 + /* "dataRead.pyx":1267 * if bit_count < 64: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -36236,7 +36236,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1206 + /* "dataRead.pyx":1268 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36246,7 +36246,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1207 + /* "dataRead.pyx":1269 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -36255,7 +36255,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1206 + /* "dataRead.pyx":1268 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36264,7 +36264,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1208 + /* "dataRead.pyx":1270 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -36277,7 +36277,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const } __pyx_L7:; - /* "dataRead.pyx":1179 + /* "dataRead.pyx":1241 * else: * return buf.byteswap() * elif n_bytes == 8: # <<<<<<<<<<<<<< @@ -36287,7 +36287,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L3; } - /* "dataRead.pyx":1209 + /* "dataRead.pyx":1271 * temp8byte |= sign_extend * buf[i] = temp8byte * elif n_bytes == 7: # <<<<<<<<<<<<<< @@ -36297,7 +36297,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_n_bytes == 7); if (__pyx_t_6) { - /* "dataRead.pyx":1210 + /* "dataRead.pyx":1272 * buf[i] = temp8byte * elif n_bytes == 7: * if swap == 0: # <<<<<<<<<<<<<< @@ -36307,7 +36307,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1211 + /* "dataRead.pyx":1273 * elif n_bytes == 7: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -36319,7 +36319,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1212 + /* "dataRead.pyx":1274 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -36328,7 +36328,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1214 + /* "dataRead.pyx":1276 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36338,7 +36338,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1215 + /* "dataRead.pyx":1277 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -36347,7 +36347,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1214 + /* "dataRead.pyx":1276 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36356,7 +36356,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1217 + /* "dataRead.pyx":1279 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 56: # <<<<<<<<<<<<<< @@ -36366,7 +36366,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count < 56); if (__pyx_t_6) { - /* "dataRead.pyx":1218 + /* "dataRead.pyx":1280 * # mask left part * if bit_count < 56: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -36375,7 +36375,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1217 + /* "dataRead.pyx":1279 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 56: # <<<<<<<<<<<<<< @@ -36384,7 +36384,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1219 + /* "dataRead.pyx":1281 * if bit_count < 56: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -36393,7 +36393,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1220 + /* "dataRead.pyx":1282 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36403,7 +36403,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1221 + /* "dataRead.pyx":1283 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -36412,7 +36412,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1220 + /* "dataRead.pyx":1282 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36421,7 +36421,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1222 + /* "dataRead.pyx":1284 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -36432,7 +36432,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1210 + /* "dataRead.pyx":1272 * buf[i] = temp8byte * elif n_bytes == 7: * if swap == 0: # <<<<<<<<<<<<<< @@ -36442,7 +36442,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L18; } - /* "dataRead.pyx":1224 + /* "dataRead.pyx":1286 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -36455,7 +36455,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1225 + /* "dataRead.pyx":1287 * else: * for i in range(number_of_records): * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -36464,7 +36464,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp7), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1227 + /* "dataRead.pyx":1289 * memcpy(&temp7, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp8byte = temp7[0]<<48 | temp7[1]<<40 | temp7[2]<<32 | \ * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes # <<<<<<<<<<<<<< @@ -36473,7 +36473,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (((((((((uint64_t)(__pyx_v_temp7[0])) << 48) | (((uint64_t)(__pyx_v_temp7[1])) << 40)) | (((uint64_t)(__pyx_v_temp7[2])) << 32)) | ((__pyx_v_temp7[3]) << 24)) | ((__pyx_v_temp7[4]) << 16)) | ((__pyx_v_temp7[5]) << 8)) | (__pyx_v_temp7[6])); - /* "dataRead.pyx":1229 + /* "dataRead.pyx":1291 * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36483,7 +36483,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1230 + /* "dataRead.pyx":1292 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -36492,7 +36492,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1229 + /* "dataRead.pyx":1291 * temp7[3]<<24 | temp7[4]<<16 | temp7[5]<<8 | temp7[6] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36501,7 +36501,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1232 + /* "dataRead.pyx":1294 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 56: # <<<<<<<<<<<<<< @@ -36511,7 +36511,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count < 56); if (__pyx_t_6) { - /* "dataRead.pyx":1233 + /* "dataRead.pyx":1295 * # mask left part * if bit_count < 56: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -36520,7 +36520,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1232 + /* "dataRead.pyx":1294 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 56: # <<<<<<<<<<<<<< @@ -36529,7 +36529,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1234 + /* "dataRead.pyx":1296 * if bit_count < 56: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -36538,7 +36538,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1235 + /* "dataRead.pyx":1297 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36548,7 +36548,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1236 + /* "dataRead.pyx":1298 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -36557,7 +36557,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1235 + /* "dataRead.pyx":1297 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36566,7 +36566,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1237 + /* "dataRead.pyx":1299 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -36579,7 +36579,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const } __pyx_L18:; - /* "dataRead.pyx":1209 + /* "dataRead.pyx":1271 * temp8byte |= sign_extend * buf[i] = temp8byte * elif n_bytes == 7: # <<<<<<<<<<<<<< @@ -36589,7 +36589,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L3; } - /* "dataRead.pyx":1238 + /* "dataRead.pyx":1300 * temp8byte |= sign_extend * buf[i] = temp8byte * elif n_bytes == 6: # <<<<<<<<<<<<<< @@ -36599,7 +36599,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_n_bytes == 6); if (__pyx_t_6) { - /* "dataRead.pyx":1239 + /* "dataRead.pyx":1301 * buf[i] = temp8byte * elif n_bytes == 6: * if swap == 0: # <<<<<<<<<<<<<< @@ -36609,7 +36609,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1240 + /* "dataRead.pyx":1302 * elif n_bytes == 6: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -36621,7 +36621,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1241 + /* "dataRead.pyx":1303 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -36630,7 +36630,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1243 + /* "dataRead.pyx":1305 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36640,7 +36640,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1244 + /* "dataRead.pyx":1306 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -36649,7 +36649,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1243 + /* "dataRead.pyx":1305 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36658,7 +36658,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1246 + /* "dataRead.pyx":1308 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 48: # <<<<<<<<<<<<<< @@ -36668,7 +36668,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count < 48); if (__pyx_t_6) { - /* "dataRead.pyx":1247 + /* "dataRead.pyx":1309 * # mask left part * if bit_count < 48: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -36677,7 +36677,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1246 + /* "dataRead.pyx":1308 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 48: # <<<<<<<<<<<<<< @@ -36686,7 +36686,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1248 + /* "dataRead.pyx":1310 * if bit_count < 48: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -36695,7 +36695,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1249 + /* "dataRead.pyx":1311 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36705,7 +36705,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1250 + /* "dataRead.pyx":1312 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -36714,7 +36714,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1249 + /* "dataRead.pyx":1311 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36723,7 +36723,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1251 + /* "dataRead.pyx":1313 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -36734,7 +36734,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1239 + /* "dataRead.pyx":1301 * buf[i] = temp8byte * elif n_bytes == 6: * if swap == 0: # <<<<<<<<<<<<<< @@ -36744,7 +36744,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L29; } - /* "dataRead.pyx":1253 + /* "dataRead.pyx":1315 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -36757,7 +36757,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1254 + /* "dataRead.pyx":1316 * else: * for i in range(number_of_records): * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -36766,7 +36766,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp6), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1256 + /* "dataRead.pyx":1318 * memcpy(&temp6, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp8byte = temp6[0]<<40 | temp6[1]<<32 | temp6[2]<<24 | \ * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes # <<<<<<<<<<<<<< @@ -36775,7 +36775,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = ((((((((uint64_t)(__pyx_v_temp6[0])) << 40) | (((uint64_t)(__pyx_v_temp6[1])) << 32)) | ((__pyx_v_temp6[2]) << 24)) | ((__pyx_v_temp6[3]) << 16)) | ((__pyx_v_temp6[4]) << 8)) | (__pyx_v_temp6[5])); - /* "dataRead.pyx":1258 + /* "dataRead.pyx":1320 * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36785,7 +36785,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1259 + /* "dataRead.pyx":1321 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -36794,7 +36794,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1258 + /* "dataRead.pyx":1320 * temp6[3]<<16 | temp6[4]<<8 | temp6[5] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36803,7 +36803,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1261 + /* "dataRead.pyx":1323 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 48: # <<<<<<<<<<<<<< @@ -36813,7 +36813,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count < 48); if (__pyx_t_6) { - /* "dataRead.pyx":1262 + /* "dataRead.pyx":1324 * # mask left part * if bit_count < 48: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -36822,7 +36822,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1261 + /* "dataRead.pyx":1323 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 48: # <<<<<<<<<<<<<< @@ -36831,7 +36831,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1263 + /* "dataRead.pyx":1325 * if bit_count < 48: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -36840,7 +36840,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1264 + /* "dataRead.pyx":1326 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36850,7 +36850,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1265 + /* "dataRead.pyx":1327 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -36859,7 +36859,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1264 + /* "dataRead.pyx":1326 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -36868,7 +36868,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1266 + /* "dataRead.pyx":1328 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -36881,7 +36881,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const } __pyx_L29:; - /* "dataRead.pyx":1238 + /* "dataRead.pyx":1300 * temp8byte |= sign_extend * buf[i] = temp8byte * elif n_bytes == 6: # <<<<<<<<<<<<<< @@ -36891,7 +36891,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L3; } - /* "dataRead.pyx":1267 + /* "dataRead.pyx":1329 * temp8byte |= sign_extend * buf[i] = temp8byte * elif n_bytes == 5: # <<<<<<<<<<<<<< @@ -36901,7 +36901,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_n_bytes == 5); if (__pyx_t_6) { - /* "dataRead.pyx":1268 + /* "dataRead.pyx":1330 * buf[i] = temp8byte * elif n_bytes == 5: * if swap == 0: # <<<<<<<<<<<<<< @@ -36911,7 +36911,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_swap == 0); if (__pyx_t_6) { - /* "dataRead.pyx":1269 + /* "dataRead.pyx":1331 * elif n_bytes == 5: * if swap == 0: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -36923,7 +36923,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1270 + /* "dataRead.pyx":1332 * if swap == 0: * for i in range(number_of_records): * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -36932,7 +36932,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp8byte), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1272 + /* "dataRead.pyx":1334 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36942,7 +36942,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1273 + /* "dataRead.pyx":1335 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -36951,7 +36951,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1272 + /* "dataRead.pyx":1334 * memcpy(&temp8byte, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -36960,7 +36960,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1275 + /* "dataRead.pyx":1337 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 40: # <<<<<<<<<<<<<< @@ -36970,7 +36970,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count < 40); if (__pyx_t_6) { - /* "dataRead.pyx":1276 + /* "dataRead.pyx":1338 * # mask left part * if bit_count < 40: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -36979,7 +36979,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1275 + /* "dataRead.pyx":1337 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 40: # <<<<<<<<<<<<<< @@ -36988,7 +36988,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1277 + /* "dataRead.pyx":1339 * if bit_count < 40: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -36997,7 +36997,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1278 + /* "dataRead.pyx":1340 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -37007,7 +37007,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1279 + /* "dataRead.pyx":1341 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -37016,7 +37016,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1278 + /* "dataRead.pyx":1340 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -37025,7 +37025,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1280 + /* "dataRead.pyx":1342 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -37036,7 +37036,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const *__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int64_t *, __pyx_pybuffernd_buf.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_buf.diminfo[0].strides) = __pyx_v_temp8byte; } - /* "dataRead.pyx":1268 + /* "dataRead.pyx":1330 * buf[i] = temp8byte * elif n_bytes == 5: * if swap == 0: # <<<<<<<<<<<<<< @@ -37046,7 +37046,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const goto __pyx_L40; } - /* "dataRead.pyx":1282 + /* "dataRead.pyx":1344 * buf[i] = temp8byte * else: * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -37059,7 +37059,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) { __pyx_v_i = __pyx_t_9; - /* "dataRead.pyx":1283 + /* "dataRead.pyx":1345 * else: * for i in range(number_of_records): * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) # <<<<<<<<<<<<<< @@ -37068,7 +37068,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ (void)(memcpy((&__pyx_v_temp5), (&(__pyx_v_bit_stream[(__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))])), __pyx_v_n_bytes)); - /* "dataRead.pyx":1285 + /* "dataRead.pyx":1347 * memcpy(&temp5, &bit_stream[pos_byte_beg + record_byte_size * i], n_bytes) * temp8byte = temp5[0]<<32 | temp5[1]<<24 | \ * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes # <<<<<<<<<<<<<< @@ -37077,7 +37077,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (((((((uint64_t)(__pyx_v_temp5[0])) << 32) | ((__pyx_v_temp5[1]) << 24)) | ((__pyx_v_temp5[2]) << 16)) | ((__pyx_v_temp5[3]) << 8)) | (__pyx_v_temp5[4])); - /* "dataRead.pyx":1287 + /* "dataRead.pyx":1349 * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -37087,7 +37087,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_offset > 0); if (__pyx_t_6) { - /* "dataRead.pyx":1288 + /* "dataRead.pyx":1350 * # right shift * if bit_offset > 0: * temp8byte = temp8byte >> bit_offset # <<<<<<<<<<<<<< @@ -37096,7 +37096,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte >> __pyx_v_bit_offset); - /* "dataRead.pyx":1287 + /* "dataRead.pyx":1349 * temp5[2]<<16 | temp5[3]<<8 | temp5[4] # swap bytes * # right shift * if bit_offset > 0: # <<<<<<<<<<<<<< @@ -37105,7 +37105,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1290 + /* "dataRead.pyx":1352 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 40: # <<<<<<<<<<<<<< @@ -37115,7 +37115,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_bit_count < 40); if (__pyx_t_6) { - /* "dataRead.pyx":1291 + /* "dataRead.pyx":1353 * # mask left part * if bit_count < 40: * temp8byte &= mask # <<<<<<<<<<<<<< @@ -37124,7 +37124,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte & __pyx_v_mask); - /* "dataRead.pyx":1290 + /* "dataRead.pyx":1352 * temp8byte = temp8byte >> bit_offset * # mask left part * if bit_count < 40: # <<<<<<<<<<<<<< @@ -37133,7 +37133,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1292 + /* "dataRead.pyx":1354 * if bit_count < 40: * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask # <<<<<<<<<<<<<< @@ -37142,7 +37142,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_sign_bit = (__pyx_v_temp8byte & __pyx_v_sign_bit_mask); - /* "dataRead.pyx":1293 + /* "dataRead.pyx":1355 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -37152,7 +37152,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_t_6 = (__pyx_v_sign_bit != 0); if (__pyx_t_6) { - /* "dataRead.pyx":1294 + /* "dataRead.pyx":1356 * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend # <<<<<<<<<<<<<< @@ -37161,7 +37161,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ __pyx_v_temp8byte = (__pyx_v_temp8byte | __pyx_v_sign_extend); - /* "dataRead.pyx":1293 + /* "dataRead.pyx":1355 * temp8byte &= mask * sign_bit = temp8byte & sign_bit_mask * if sign_bit: # negative value, sign extend # <<<<<<<<<<<<<< @@ -37170,7 +37170,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const */ } - /* "dataRead.pyx":1295 + /* "dataRead.pyx":1357 * if sign_bit: # negative value, sign extend * temp8byte |= sign_extend * buf[i] = temp8byte # <<<<<<<<<<<<<< @@ -37183,7 +37183,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const } __pyx_L40:; - /* "dataRead.pyx":1267 + /* "dataRead.pyx":1329 * temp8byte |= sign_extend * buf[i] = temp8byte * elif n_bytes == 5: # <<<<<<<<<<<<<< @@ -37193,7 +37193,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const } __pyx_L3:; - /* "dataRead.pyx":1296 + /* "dataRead.pyx":1358 * temp8byte |= sign_extend * buf[i] = temp8byte * return buf # <<<<<<<<<<<<<< @@ -37205,7 +37205,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":1157 + /* "dataRead.pyx":1219 * return buf * * cdef inline read_signed_longlong(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -37237,7 +37237,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_signed_longlong(char const return __pyx_r; } -/* "dataRead.pyx":1298 +/* "dataRead.pyx":1360 * return buf * * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -37263,38 +37263,38 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_b int __pyx_clineno = 0; __Pyx_RefNannySetupContext("read_byte", 1); - /* "dataRead.pyx":1301 + /* "dataRead.pyx":1363 * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, * unsigned long bit_count, unsigned char bit_offset): * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1301, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1301, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1363, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1301, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1301, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1301, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1363, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1363, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1301, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1363, __pyx_L1_error) __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1303 + /* "dataRead.pyx":1365 * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< @@ -37303,7 +37303,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_b */ __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); - /* "dataRead.pyx":1304 + /* "dataRead.pyx":1366 * cdef unsigned long long i * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -37315,23 +37315,23 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_b for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { __pyx_v_i = __pyx_t_7; - /* "dataRead.pyx":1305 + /* "dataRead.pyx":1367 * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes * for i in range(number_of_records): * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< * pos_byte_end + record_byte_size * i]) * return buf */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1305, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1305, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1367, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_1, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1305, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_1, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1367, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } - /* "dataRead.pyx":1307 + /* "dataRead.pyx":1369 * buf[i] = bytes(bit_stream[pos_byte_beg + record_byte_size * i:\ * pos_byte_end + record_byte_size * i]) * return buf # <<<<<<<<<<<<<< @@ -37343,7 +37343,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_b __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":1298 + /* "dataRead.pyx":1360 * return buf * * cdef inline read_byte(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -37366,7 +37366,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_byte(char const *__pyx_v_b return __pyx_r; } -/* "dataRead.pyx":1309 +/* "dataRead.pyx":1371 * return buf * * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -37394,38 +37394,38 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("read_array", 1); - /* "dataRead.pyx":1312 + /* "dataRead.pyx":1374 * unsigned long record_byte_size, unsigned long pos_byte_beg, unsigned long n_bytes, * unsigned long bit_count, unsigned char bit_offset, unsigned char swap): * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1312, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_empty); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_number_of_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1312, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1374, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1312, __pyx_L1_error) - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1312, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1374, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1374, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1312, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1374, __pyx_L1_error) __pyx_v_buf = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1314 + /* "dataRead.pyx":1376 * cdef np.ndarray buf = np.empty(number_of_records, dtype=record_format) # return numpy array * cdef unsigned long long i * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes # <<<<<<<<<<<<<< @@ -37434,7 +37434,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ */ __pyx_v_pos_byte_end = (__pyx_v_pos_byte_beg + __pyx_v_n_bytes); - /* "dataRead.pyx":1315 + /* "dataRead.pyx":1377 * cdef unsigned long long i * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes * for i in range(number_of_records): # <<<<<<<<<<<<<< @@ -37446,70 +37446,70 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) { __pyx_v_i = __pyx_t_7; - /* "dataRead.pyx":1316 + /* "dataRead.pyx":1378 * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes * for i in range(number_of_records): * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< * pos_byte_end + record_byte_size * i], dtype=record_format) * if swap == 0: */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1316, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1316, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_frombuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1317 + /* "dataRead.pyx":1379 * for i in range(number_of_records): * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< * if swap == 0: * return buf */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1316, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i)), (__pyx_v_pos_byte_end + (__pyx_v_record_byte_size * __pyx_v_i)) - (__pyx_v_pos_byte_beg + (__pyx_v_record_byte_size * __pyx_v_i))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - /* "dataRead.pyx":1316 + /* "dataRead.pyx":1378 * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes * for i in range(number_of_records): * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< * pos_byte_end + record_byte_size * i], dtype=record_format) * if swap == 0: */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1316, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_4); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(0, 1316, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(0, 1378, __pyx_L1_error); __pyx_t_4 = 0; - /* "dataRead.pyx":1317 + /* "dataRead.pyx":1379 * for i in range(number_of_records): * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ * pos_byte_end + record_byte_size * i], dtype=record_format) # <<<<<<<<<<<<<< * if swap == 0: * return buf */ - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1317, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1379, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1317, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_dtype, __pyx_v_record_format) < 0) __PYX_ERR(0, 1379, __pyx_L1_error) - /* "dataRead.pyx":1316 + /* "dataRead.pyx":1378 * cdef unsigned long pos_byte_end = pos_byte_beg + n_bytes * for i in range(number_of_records): * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ # <<<<<<<<<<<<<< * pos_byte_end + record_byte_size * i], dtype=record_format) * if swap == 0: */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1316, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_2, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1316, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_buf), __pyx_v_i, __pyx_t_2, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1378, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - /* "dataRead.pyx":1318 + /* "dataRead.pyx":1380 * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ * pos_byte_end + record_byte_size * i], dtype=record_format) * if swap == 0: # <<<<<<<<<<<<<< @@ -37519,7 +37519,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ __pyx_t_8 = (__pyx_v_swap == 0); if (__pyx_t_8) { - /* "dataRead.pyx":1319 + /* "dataRead.pyx":1381 * pos_byte_end + record_byte_size * i], dtype=record_format) * if swap == 0: * return buf # <<<<<<<<<<<<<< @@ -37531,7 +37531,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ __pyx_r = ((PyObject *)__pyx_v_buf); goto __pyx_L0; - /* "dataRead.pyx":1318 + /* "dataRead.pyx":1380 * buf[i] = np.frombuffer(bit_stream[pos_byte_beg + record_byte_size * i:\ * pos_byte_end + record_byte_size * i], dtype=record_format) * if swap == 0: # <<<<<<<<<<<<<< @@ -37540,7 +37540,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ */ } - /* "dataRead.pyx":1321 + /* "dataRead.pyx":1383 * return buf * else: * return buf.byteswap() # <<<<<<<<<<<<<< @@ -37549,7 +37549,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ */ /*else*/ { __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1321, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_buf), __pyx_n_s_byteswap); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = NULL; __pyx_t_9 = 0; @@ -37569,7 +37569,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL}; __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_9, 0+__pyx_t_9); __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1321, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1383, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } @@ -37578,7 +37578,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ goto __pyx_L0; } - /* "dataRead.pyx":1309 + /* "dataRead.pyx":1371 * return buf * * cdef inline read_array(const char* bit_stream, str record_format, unsigned long long number_of_records, # <<<<<<<<<<<<<< @@ -37601,7 +37601,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_read_array(char const *__pyx_v_ return __pyx_r; } -/* "dataRead.pyx":1323 +/* "dataRead.pyx":1385 * return buf.byteswap() * * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< @@ -37675,7 +37675,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1385, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -37683,9 +37683,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1385, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 1); __PYX_ERR(0, 1323, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 1); __PYX_ERR(0, 1385, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -37693,9 +37693,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1385, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 2); __PYX_ERR(0, 1323, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 2); __PYX_ERR(0, 1385, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: @@ -37703,9 +37703,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1385, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 3); __PYX_ERR(0, 1323, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 3); __PYX_ERR(0, 1385, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: @@ -37713,14 +37713,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1323, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1385, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 4); __PYX_ERR(0, 1323, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, 4); __PYX_ERR(0, 1385, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "unsorted_data_read4") < 0)) __PYX_ERR(0, 1323, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "unsorted_data_read4") < 0)) __PYX_ERR(0, 1385, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 5)) { goto __pyx_L5_argtuple_error; @@ -37734,12 +37734,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __pyx_v_record = values[0]; __pyx_v_info = values[1]; __pyx_v_tmp = ((PyObject*)values[2]); - __pyx_v_record_id_size = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_record_id_size == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1324, __pyx_L3_error) - __pyx_v_data_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_data_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1325, __pyx_L3_error) + __pyx_v_record_id_size = __Pyx_PyInt_As_unsigned_short(values[3]); if (unlikely((__pyx_v_record_id_size == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1386, __pyx_L3_error) + __pyx_v_data_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_data_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1387, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1323, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("unsorted_data_read4", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1385, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -37753,7 +37753,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 1323, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tmp), (&PyBytes_Type), 1, "tmp", 1))) __PYX_ERR(0, 1385, __pyx_L1_error) __pyx_r = __pyx_pf_8dataRead_4unsorted_data_read4(__pyx_self, __pyx_v_record, __pyx_v_info, __pyx_v_tmp, __pyx_v_record_id_size, __pyx_v_data_block_length); /* function exit code */ @@ -37822,17 +37822,17 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject int __pyx_clineno = 0; __Pyx_RefNannySetupContext("unsorted_data_read4", 1); - /* "dataRead.pyx":1347 + /* "dataRead.pyx":1409 * * """ * cdef const char* bit_stream = PyBytes_AsString(tmp) # <<<<<<<<<<<<<< * cdef unsigned long long position = 0 * cdef unsigned char record_id_char = 0 */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1347, __pyx_L1_error) + __pyx_t_1 = PyBytes_AsString(__pyx_v_tmp); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1409, __pyx_L1_error) __pyx_v_bit_stream = __pyx_t_1; - /* "dataRead.pyx":1348 + /* "dataRead.pyx":1410 * """ * cdef const char* bit_stream = PyBytes_AsString(tmp) * cdef unsigned long long position = 0 # <<<<<<<<<<<<<< @@ -37841,7 +37841,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ __pyx_v_position = 0; - /* "dataRead.pyx":1349 + /* "dataRead.pyx":1411 * cdef const char* bit_stream = PyBytes_AsString(tmp) * cdef unsigned long long position = 0 * cdef unsigned char record_id_char = 0 # <<<<<<<<<<<<<< @@ -37850,7 +37850,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ __pyx_v_record_id_char = 0; - /* "dataRead.pyx":1350 + /* "dataRead.pyx":1412 * cdef unsigned long long position = 0 * cdef unsigned char record_id_char = 0 * cdef unsigned short record_id_short = 0 # <<<<<<<<<<<<<< @@ -37859,7 +37859,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ __pyx_v_record_id_short = 0; - /* "dataRead.pyx":1351 + /* "dataRead.pyx":1413 * cdef unsigned char record_id_char = 0 * cdef unsigned short record_id_short = 0 * cdef unsigned long record_id_long = 0 # <<<<<<<<<<<<<< @@ -37868,7 +37868,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ __pyx_v_record_id_long = 0; - /* "dataRead.pyx":1352 + /* "dataRead.pyx":1414 * cdef unsigned short record_id_short = 0 * cdef unsigned long record_id_long = 0 * cdef unsigned long long record_id_long_long = 0 # <<<<<<<<<<<<<< @@ -37877,163 +37877,163 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ __pyx_v_record_id_long_long = 0; - /* "dataRead.pyx":1355 + /* "dataRead.pyx":1417 * # initialise data structure * # key is channel name * cdef dict buf = {} # <<<<<<<<<<<<<< * cdef dict VLSD = {} * cdef dict pos_byte_beg = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1355, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1417, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_buf = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1356 + /* "dataRead.pyx":1418 * # key is channel name * cdef dict buf = {} * cdef dict VLSD = {} # <<<<<<<<<<<<<< * cdef dict pos_byte_beg = {} * cdef dict pos_byte_end = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1356, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1418, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_VLSD = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1357 + /* "dataRead.pyx":1419 * cdef dict buf = {} * cdef dict VLSD = {} * cdef dict pos_byte_beg = {} # <<<<<<<<<<<<<< * cdef dict pos_byte_end = {} * cdef dict c_format_structure = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1357, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1419, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_pos_byte_beg = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1358 + /* "dataRead.pyx":1420 * cdef dict VLSD = {} * cdef dict pos_byte_beg = {} * cdef dict pos_byte_end = {} # <<<<<<<<<<<<<< * cdef dict c_format_structure = {} * cdef dict byte_length = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1358, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1420, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_pos_byte_end = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1359 + /* "dataRead.pyx":1421 * cdef dict pos_byte_beg = {} * cdef dict pos_byte_end = {} * cdef dict c_format_structure = {} # <<<<<<<<<<<<<< * cdef dict byte_length = {} * cdef dict numpy_format = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1359, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1421, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_c_format_structure = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1360 + /* "dataRead.pyx":1422 * cdef dict pos_byte_end = {} * cdef dict c_format_structure = {} * cdef dict byte_length = {} # <<<<<<<<<<<<<< * cdef dict numpy_format = {} * # key is record id */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1360, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1422, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_byte_length = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1361 + /* "dataRead.pyx":1423 * cdef dict c_format_structure = {} * cdef dict byte_length = {} * cdef dict numpy_format = {} # <<<<<<<<<<<<<< * # key is record id * cdef dict index = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1361, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1423, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_numpy_format = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1363 + /* "dataRead.pyx":1425 * cdef dict numpy_format = {} * # key is record id * cdef dict index = {} # <<<<<<<<<<<<<< * cdef dict CGrecordLength = {} * cdef dict VLSD_flag = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1363, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1425, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_index = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1364 + /* "dataRead.pyx":1426 * # key is record id * cdef dict index = {} * cdef dict CGrecordLength = {} # <<<<<<<<<<<<<< * cdef dict VLSD_flag = {} * cdef dict VLSD_CG_name = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1364, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1426, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_CGrecordLength = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1365 + /* "dataRead.pyx":1427 * cdef dict index = {} * cdef dict CGrecordLength = {} * cdef dict VLSD_flag = {} # <<<<<<<<<<<<<< * cdef dict VLSD_CG_name = {} * cdef dict VLSD_CG_signal_data_type = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1365, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1427, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_VLSD_flag = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1366 + /* "dataRead.pyx":1428 * cdef dict CGrecordLength = {} * cdef dict VLSD_flag = {} * cdef dict VLSD_CG_name = {} # <<<<<<<<<<<<<< * cdef dict VLSD_CG_signal_data_type = {} * cdef dict channel_name_set = {} */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1366, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1428, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_VLSD_CG_name = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1367 + /* "dataRead.pyx":1429 * cdef dict VLSD_flag = {} * cdef dict VLSD_CG_name = {} * cdef dict VLSD_CG_signal_data_type = {} # <<<<<<<<<<<<<< * cdef dict channel_name_set = {} * for record_id in record: */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1367, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1429, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_VLSD_CG_signal_data_type = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1368 + /* "dataRead.pyx":1430 * cdef dict VLSD_CG_name = {} * cdef dict VLSD_CG_signal_data_type = {} * cdef dict channel_name_set = {} # <<<<<<<<<<<<<< * for record_id in record: * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1368, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1430, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_channel_name_set = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1369 + /* "dataRead.pyx":1431 * cdef dict VLSD_CG_signal_data_type = {} * cdef dict channel_name_set = {} * for record_id in record: # <<<<<<<<<<<<<< @@ -38045,9 +38045,9 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_3 = 0; __pyx_t_4 = NULL; } else { - __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_record); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1369, __pyx_L1_error) + __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_record); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1369, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1431, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_4)) { @@ -38055,28 +38055,28 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2); #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1369, __pyx_L1_error) + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1431, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1369, __pyx_L1_error) + __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1431, __pyx_L1_error) #else - __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1369, __pyx_L1_error) + __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2); #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1369, __pyx_L1_error) + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1431, __pyx_L1_error) #endif if (__pyx_t_3 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1369, __pyx_L1_error) + __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(0, 1431, __pyx_L1_error) #else - __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1369, __pyx_L1_error) + __pyx_t_5 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1431, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif } @@ -38086,7 +38086,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 1369, __pyx_L1_error) + else __PYX_ERR(0, 1431, __pyx_L1_error) } break; } @@ -38095,110 +38095,110 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_XDECREF_SET(__pyx_v_record_id, __pyx_t_5); __pyx_t_5 = 0; - /* "dataRead.pyx":1370 + /* "dataRead.pyx":1432 * cdef dict channel_name_set = {} * for record_id in record: * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< * VLSD_flag[record_id] = True * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] */ - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1370, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1370, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_Flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1370, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_Flags); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyInt_AndObjC(__pyx_t_5, __pyx_int_33, 33, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1370, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_AndObjC(__pyx_t_5, __pyx_int_33, 33, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1432, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1370, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1432, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (__pyx_t_7) { - /* "dataRead.pyx":1371 + /* "dataRead.pyx":1433 * for record_id in record: * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) * VLSD_flag[record_id] = True # <<<<<<<<<<<<<< * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] */ - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_True) < 0))) __PYX_ERR(0, 1371, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_True) < 0))) __PYX_ERR(0, 1433, __pyx_L1_error) - /* "dataRead.pyx":1372 + /* "dataRead.pyx":1434 * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) * VLSD_flag[record_id] = True * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] # <<<<<<<<<<<<<< * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) */ - __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1372, __pyx_L1_error) + __pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1372, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1372, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1372, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1372, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channelName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1372, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channelName); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1434, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_t_5, __pyx_t_6) < 0))) __PYX_ERR(0, 1372, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_t_5, __pyx_t_6) < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":1373 + /* "dataRead.pyx":1435 * VLSD_flag[record_id] = True * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] # <<<<<<<<<<<<<< * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) * else: */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1373, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1373, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1373, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1373, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_channelName); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1373, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_channelName); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1435, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1373, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1435, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":1374 + /* "dataRead.pyx":1436 * VLSD[record[record_id]['record'].VLSD_CG[record_id]['channelName']] = [] * VLSD_CG_name[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channelName'] * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) # <<<<<<<<<<<<<< * else: * VLSD_flag[record_id] = False */ - __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1374, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1374, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_Dict_GetItem(__pyx_t_5, __pyx_n_u_record); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1374, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_VLSD_CG); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1374, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channel); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1374, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_channel); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_signal_data_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1374, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_signal_data_type); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = NULL; @@ -38219,14 +38219,14 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_v_info}; __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_8, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1374, __pyx_L1_error) + if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1374, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1436, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":1370 + /* "dataRead.pyx":1432 * cdef dict channel_name_set = {} * for record_id in record: * if record[record_id]['record'].Flags & 0b100001: # VLSD (bit 0) or VLSC compact (bit 5) # <<<<<<<<<<<<<< @@ -38236,7 +38236,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject goto __pyx_L5; } - /* "dataRead.pyx":1376 + /* "dataRead.pyx":1438 * VLSD_CG_signal_data_type[record_id] = record[record_id]['record'].VLSD_CG[record_id]['channel'].signal_data_type(info) * else: * VLSD_flag[record_id] = False # <<<<<<<<<<<<<< @@ -38244,9 +38244,9 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject * #if not Channel.VLSD_CG_Flag: */ /*else*/ { - if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_False) < 0))) __PYX_ERR(0, 1376, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_VLSD_flag, __pyx_v_record_id, Py_False) < 0))) __PYX_ERR(0, 1438, __pyx_L1_error) - /* "dataRead.pyx":1377 + /* "dataRead.pyx":1439 * else: * VLSD_flag[record_id] = False * for Channel in record[record_id]['record'].values(): # <<<<<<<<<<<<<< @@ -38254,16 +38254,16 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), */ __pyx_t_10 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1377, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1377, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; if (unlikely(__pyx_t_5 == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values"); - __PYX_ERR(0, 1377, __pyx_L1_error) + __PYX_ERR(0, 1439, __pyx_L1_error) } - __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1377, __pyx_L1_error) + __pyx_t_8 = __Pyx_dict_iterator(__pyx_t_5, 0, __pyx_n_s_values, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_XDECREF(__pyx_t_6); @@ -38272,54 +38272,54 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject while (1) { __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_10, NULL, &__pyx_t_8, NULL, __pyx_t_12); if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1377, __pyx_L1_error) + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1439, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_Channel, __pyx_t_8); __pyx_t_8 = 0; - /* "dataRead.pyx":1379 + /* "dataRead.pyx":1441 * for Channel in record[record_id]['record'].values(): * #if not Channel.VLSD_CG_Flag: * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') * numpy_format[Channel.name] = Channel.data_format(info) */ - __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_np); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1379, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_empty); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1379, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyObject_Dict_GetItem(__pyx_t_8, __pyx_n_u_record); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_numberOfRecords); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_numberOfRecords); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1379, __pyx_L1_error) + __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_GIVEREF(__pyx_t_8); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_8)) __PYX_ERR(0, 1441, __pyx_L1_error); __pyx_t_8 = 0; - __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1379, __pyx_L1_error) + __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_14); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14)) __PYX_ERR(0, 1379, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14)) __PYX_ERR(0, 1441, __pyx_L1_error); __pyx_t_14 = 0; - /* "dataRead.pyx":1380 + /* "dataRead.pyx":1442 * #if not Channel.VLSD_CG_Flag: * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') # <<<<<<<<<<<<<< * numpy_format[Channel.name] = Channel.data_format(info) * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset */ - __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1380, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1380, __pyx_L1_error) + __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 1442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_16); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1380, __pyx_L1_error) + __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __pyx_t_18 = NULL; __pyx_t_9 = 0; @@ -38340,40 +38340,40 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_16, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1380, __pyx_L1_error) + if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1442, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; } - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 1380, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_15) < 0) __PYX_ERR(0, 1442, __pyx_L1_error) __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 1380, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_order, __pyx_n_u_C) < 0) __PYX_ERR(0, 1442, __pyx_L1_error) - /* "dataRead.pyx":1379 + /* "dataRead.pyx":1441 * for Channel in record[record_id]['record'].values(): * #if not Channel.VLSD_CG_Flag: * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), # <<<<<<<<<<<<<< * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') * numpy_format[Channel.name] = Channel.data_format(info) */ - __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1379, __pyx_L1_error) + __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_14); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1379, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 1379, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 1441, __pyx_L1_error) __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - /* "dataRead.pyx":1381 + /* "dataRead.pyx":1443 * buf[Channel.name] = np.empty((record[record_id]['record'].numberOfRecords,), * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') * numpy_format[Channel.name] = Channel.data_format(info) # <<<<<<<<<<<<<< * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned */ - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_data_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1381, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_data_format); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_8 = NULL; __pyx_t_9 = 0; @@ -38393,111 +38393,111 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject PyObject *__pyx_callargs[2] = {__pyx_t_8, __pyx_v_info}; __pyx_t_15 = __Pyx_PyObject_FastCall(__pyx_t_14, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1381, __pyx_L1_error) + if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; } - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1381, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1443, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_numpy_format, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 1381, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_numpy_format, __pyx_t_14, __pyx_t_15) < 0))) __PYX_ERR(0, 1443, __pyx_L1_error) __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - /* "dataRead.pyx":1382 + /* "dataRead.pyx":1444 * dtype='V{}'.format(Channel.nBytes_aligned), order ='C') * numpy_format[Channel.name] = Channel.data_format(info) * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset # <<<<<<<<<<<<<< * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned * index[record_id] = 0 */ - __pyx_t_15 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1382, __pyx_L1_error) + __pyx_t_15 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_size); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1444, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_byteOffset); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1382, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_byteOffset); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1444, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1382, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_15, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1444, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1382, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1444, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_beg, __pyx_t_14, __pyx_t_8) < 0))) __PYX_ERR(0, 1382, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_beg, __pyx_t_14, __pyx_t_8) < 0))) __PYX_ERR(0, 1444, __pyx_L1_error) __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - /* "dataRead.pyx":1383 + /* "dataRead.pyx":1445 * numpy_format[Channel.name] = Channel.data_format(info) * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned # <<<<<<<<<<<<<< * index[record_id] = 0 * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength */ - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1383, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_pos_byte_beg, __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1383, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_pos_byte_beg, __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1383, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_nBytes_aligned); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_15 = PyNumber_Add(__pyx_t_14, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1383, __pyx_L1_error) + __pyx_t_15 = PyNumber_Add(__pyx_t_14, __pyx_t_8); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1383, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_Channel, __pyx_n_s_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1445, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_end, __pyx_t_8, __pyx_t_15) < 0))) __PYX_ERR(0, 1383, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_pos_byte_end, __pyx_t_8, __pyx_t_15) < 0))) __PYX_ERR(0, 1445, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":1384 + /* "dataRead.pyx":1446 * pos_byte_beg[Channel.name] = record_id_size + Channel.byteOffset * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned * index[record_id] = 0 # <<<<<<<<<<<<<< * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength * channel_name_set[record_id] = record[record_id]['record'].channelNames */ - if (unlikely((PyDict_SetItem(__pyx_v_index, __pyx_v_record_id, __pyx_int_0) < 0))) __PYX_ERR(0, 1384, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_index, __pyx_v_record_id, __pyx_int_0) < 0))) __PYX_ERR(0, 1446, __pyx_L1_error) - /* "dataRead.pyx":1385 + /* "dataRead.pyx":1447 * pos_byte_end[Channel.name] = pos_byte_beg[Channel.name] + Channel.nBytes_aligned * index[record_id] = 0 * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength # <<<<<<<<<<<<<< * channel_name_set[record_id] = record[record_id]['record'].channelNames * # read data */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1385, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1385, __pyx_L1_error) + __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_CGrecordLength); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1385, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_CGrecordLength); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1447, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_CGrecordLength, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1385, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_CGrecordLength, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1447, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":1386 + /* "dataRead.pyx":1448 * index[record_id] = 0 * CGrecordLength[record_id] = record[record_id]['record'].CGrecordLength * channel_name_set[record_id] = record[record_id]['record'].channelNames # <<<<<<<<<<<<<< * # read data * if record_id_size == 1: */ - __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1386, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_v_record, __pyx_v_record_id); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1448, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1386, __pyx_L1_error) + __pyx_t_15 = __Pyx_PyObject_Dict_GetItem(__pyx_t_6, __pyx_n_u_record); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1448, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_channelNames); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1386, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_channelNames); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1448, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; - if (unlikely((PyDict_SetItem(__pyx_v_channel_name_set, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1386, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_channel_name_set, __pyx_v_record_id, __pyx_t_6) < 0))) __PYX_ERR(0, 1448, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __pyx_L5:; - /* "dataRead.pyx":1369 + /* "dataRead.pyx":1431 * cdef dict VLSD_CG_signal_data_type = {} * cdef dict channel_name_set = {} * for record_id in record: # <<<<<<<<<<<<<< @@ -38507,7 +38507,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - /* "dataRead.pyx":1388 + /* "dataRead.pyx":1450 * channel_name_set[record_id] = record[record_id]['record'].channelNames * # read data * if record_id_size == 1: # <<<<<<<<<<<<<< @@ -38517,7 +38517,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject switch (__pyx_v_record_id_size) { case 1: - /* "dataRead.pyx":1389 + /* "dataRead.pyx":1451 * # read data * if record_id_size == 1: * while position < data_block_length: # <<<<<<<<<<<<<< @@ -38528,7 +38528,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); if (!__pyx_t_7) break; - /* "dataRead.pyx":1390 + /* "dataRead.pyx":1452 * if record_id_size == 1: * while position < data_block_length: * memcpy(&record_id_char, &bit_stream[position], 1) # <<<<<<<<<<<<<< @@ -38537,24 +38537,24 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ (void)(memcpy((&__pyx_v_record_id_char), (&(__pyx_v_bit_stream[__pyx_v_position])), 1)); - /* "dataRead.pyx":1391 + /* "dataRead.pyx":1453 * while position < data_block_length: * memcpy(&record_id_char, &bit_stream[position], 1) * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, */ - __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_record_id_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1391, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_unsigned_char(__pyx_v_record_id_char); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - /* "dataRead.pyx":1394 + /* "dataRead.pyx":1456 * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< * elif record_id_size == 2: * while position < data_block_length: */ - __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 1, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1391, __pyx_L1_error) + __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 1, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { @@ -38563,7 +38563,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject if (unlikely(size != 4)) { if (size > 4) __Pyx_RaiseTooManyValuesError(4); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1391, __pyx_L1_error) + __PYX_ERR(0, 1453, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { @@ -38586,7 +38586,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject Py_ssize_t i; PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1391, __pyx_L1_error) + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1453, __pyx_L1_error) __Pyx_GOTREF(item); *(temps[i]) = item; } @@ -38596,7 +38596,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject } else { Py_ssize_t index = -1; PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_15,&__pyx_t_8,&__pyx_t_14}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1391, __pyx_L1_error) + __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1453, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); @@ -38605,7 +38605,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_GOTREF(item); *(temps[index]) = item; } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1391, __pyx_L1_error) + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1453, __pyx_L1_error) __pyx_t_19 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L12_unpacking_done; @@ -38613,22 +38613,22 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_19 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1391, __pyx_L1_error) + __PYX_ERR(0, 1453, __pyx_L1_error) __pyx_L12_unpacking_done:; } - /* "dataRead.pyx":1391 + /* "dataRead.pyx":1453 * while position < data_block_length: * memcpy(&record_id_char, &bit_stream[position], 1) * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_char, 1, # <<<<<<<<<<<<<< * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1391, __pyx_L1_error) + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1453, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1391, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1391, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 1391, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1453, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1453, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 1453, __pyx_L1_error) __pyx_v_position = __pyx_t_20; __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); __pyx_t_15 = 0; @@ -38638,7 +38638,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_14 = 0; } - /* "dataRead.pyx":1388 + /* "dataRead.pyx":1450 * channel_name_set[record_id] = record[record_id]['record'].channelNames * # read data * if record_id_size == 1: # <<<<<<<<<<<<<< @@ -38648,7 +38648,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject break; case 2: - /* "dataRead.pyx":1396 + /* "dataRead.pyx":1458 * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) * elif record_id_size == 2: * while position < data_block_length: # <<<<<<<<<<<<<< @@ -38659,7 +38659,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); if (!__pyx_t_7) break; - /* "dataRead.pyx":1397 + /* "dataRead.pyx":1459 * elif record_id_size == 2: * while position < data_block_length: * memcpy(&record_id_short, &bit_stream[position], 2) # <<<<<<<<<<<<<< @@ -38668,24 +38668,24 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ (void)(memcpy((&__pyx_v_record_id_short), (&(__pyx_v_bit_stream[__pyx_v_position])), 2)); - /* "dataRead.pyx":1398 + /* "dataRead.pyx":1460 * while position < data_block_length: * memcpy(&record_id_short, &bit_stream[position], 2) * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, */ - __pyx_t_6 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_short); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1398, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_From_unsigned_short(__pyx_v_record_id_short); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); - /* "dataRead.pyx":1401 + /* "dataRead.pyx":1463 * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< * elif record_id_size == 3: * while position < data_block_length: */ - __pyx_t_14 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_6, 2, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1398, __pyx_L1_error) + __pyx_t_14 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_6, 2, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_14))) || (PyList_CheckExact(__pyx_t_14))) { @@ -38694,7 +38694,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject if (unlikely(size != 4)) { if (size > 4) __Pyx_RaiseTooManyValuesError(4); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1398, __pyx_L1_error) + __PYX_ERR(0, 1460, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { @@ -38717,7 +38717,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject Py_ssize_t i; PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1398, __pyx_L1_error) + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1460, __pyx_L1_error) __Pyx_GOTREF(item); *(temps[i]) = item; } @@ -38727,7 +38727,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject } else { Py_ssize_t index = -1; PyObject** temps[4] = {&__pyx_t_6,&__pyx_t_8,&__pyx_t_15,&__pyx_t_2}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1398, __pyx_L1_error) + __pyx_t_5 = PyObject_GetIter(__pyx_t_14); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1460, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); @@ -38736,7 +38736,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_GOTREF(item); *(temps[index]) = item; } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1398, __pyx_L1_error) + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1460, __pyx_L1_error) __pyx_t_19 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L16_unpacking_done; @@ -38744,22 +38744,22 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_19 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1398, __pyx_L1_error) + __PYX_ERR(0, 1460, __pyx_L1_error) __pyx_L16_unpacking_done:; } - /* "dataRead.pyx":1398 + /* "dataRead.pyx":1460 * while position < data_block_length: * memcpy(&record_id_short, &bit_stream[position], 2) * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_short, 2, # <<<<<<<<<<<<<< * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_6); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1398, __pyx_L1_error) + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_6); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1460, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1398, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1398, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 1398, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1460, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1460, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_2))) __PYX_ERR(0, 1460, __pyx_L1_error) __pyx_v_position = __pyx_t_20; __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); __pyx_t_8 = 0; @@ -38769,7 +38769,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_2 = 0; } - /* "dataRead.pyx":1395 + /* "dataRead.pyx":1457 * c_format_structure, index, CGrecordLength, * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) * elif record_id_size == 2: # <<<<<<<<<<<<<< @@ -38779,7 +38779,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject break; case 3: - /* "dataRead.pyx":1403 + /* "dataRead.pyx":1465 * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) * elif record_id_size == 3: * while position < data_block_length: # <<<<<<<<<<<<<< @@ -38790,7 +38790,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); if (!__pyx_t_7) break; - /* "dataRead.pyx":1404 + /* "dataRead.pyx":1466 * elif record_id_size == 3: * while position < data_block_length: * memcpy(&record_id_long, &bit_stream[position], 4) # <<<<<<<<<<<<<< @@ -38799,24 +38799,24 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ (void)(memcpy((&__pyx_v_record_id_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); - /* "dataRead.pyx":1405 + /* "dataRead.pyx":1467 * while position < data_block_length: * memcpy(&record_id_long, &bit_stream[position], 4) * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, */ - __pyx_t_14 = __Pyx_PyInt_From_unsigned_long(__pyx_v_record_id_long); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1405, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyInt_From_unsigned_long(__pyx_v_record_id_long); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - /* "dataRead.pyx":1408 + /* "dataRead.pyx":1470 * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< * elif record_id_size == 4: * while position < data_block_length: */ - __pyx_t_2 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_14, 4, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1405, __pyx_L1_error) + __pyx_t_2 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_14, 4, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { @@ -38825,7 +38825,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject if (unlikely(size != 4)) { if (size > 4) __Pyx_RaiseTooManyValuesError(4); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1405, __pyx_L1_error) + __PYX_ERR(0, 1467, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { @@ -38848,7 +38848,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject Py_ssize_t i; PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1405, __pyx_L1_error) + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1467, __pyx_L1_error) __Pyx_GOTREF(item); *(temps[i]) = item; } @@ -38858,7 +38858,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject } else { Py_ssize_t index = -1; PyObject** temps[4] = {&__pyx_t_14,&__pyx_t_15,&__pyx_t_8,&__pyx_t_6}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1405, __pyx_L1_error) + __pyx_t_5 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1467, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); @@ -38867,7 +38867,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_GOTREF(item); *(temps[index]) = item; } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1405, __pyx_L1_error) + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1467, __pyx_L1_error) __pyx_t_19 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L20_unpacking_done; @@ -38875,22 +38875,22 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_19 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1405, __pyx_L1_error) + __PYX_ERR(0, 1467, __pyx_L1_error) __pyx_L20_unpacking_done:; } - /* "dataRead.pyx":1405 + /* "dataRead.pyx":1467 * while position < data_block_length: * memcpy(&record_id_long, &bit_stream[position], 4) * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long, 4, # <<<<<<<<<<<<<< * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_14); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1405, __pyx_L1_error) + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_14); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1467, __pyx_L1_error) __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1405, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1405, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_6))) __PYX_ERR(0, 1405, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1467, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1467, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_6))) __PYX_ERR(0, 1467, __pyx_L1_error) __pyx_v_position = __pyx_t_20; __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_15)); __pyx_t_15 = 0; @@ -38900,7 +38900,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_6 = 0; } - /* "dataRead.pyx":1402 + /* "dataRead.pyx":1464 * c_format_structure, index, CGrecordLength, * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) * elif record_id_size == 3: # <<<<<<<<<<<<<< @@ -38910,7 +38910,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject break; case 4: - /* "dataRead.pyx":1410 + /* "dataRead.pyx":1472 * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) * elif record_id_size == 4: * while position < data_block_length: # <<<<<<<<<<<<<< @@ -38921,7 +38921,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_7 = (__pyx_v_position < __pyx_v_data_block_length); if (!__pyx_t_7) break; - /* "dataRead.pyx":1411 + /* "dataRead.pyx":1473 * elif record_id_size == 4: * while position < data_block_length: * memcpy(&record_id_long_long, &bit_stream[position], 8) # <<<<<<<<<<<<<< @@ -38930,24 +38930,24 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ (void)(memcpy((&__pyx_v_record_id_long_long), (&(__pyx_v_bit_stream[__pyx_v_position])), 8)); - /* "dataRead.pyx":1412 + /* "dataRead.pyx":1474 * while position < data_block_length: * memcpy(&record_id_long_long, &bit_stream[position], 8) * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, */ - __pyx_t_2 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_record_id_long_long); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1412, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_record_id_long_long); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1474, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - /* "dataRead.pyx":1415 + /* "dataRead.pyx":1477 * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) # <<<<<<<<<<<<<< * # changing from bytes type to desired type * if buf: */ - __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 8, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1412, __pyx_L1_error) + __pyx_t_6 = __pyx_f_8dataRead_unsorted_read4(__pyx_v_bit_stream, __pyx_v_tmp, __pyx_t_2, 8, __pyx_v_position, __pyx_v_buf, __pyx_v_VLSD, __pyx_v_pos_byte_beg, __pyx_v_pos_byte_end, __pyx_v_c_format_structure, __pyx_v_index, __pyx_v_CGrecordLength, __pyx_v_VLSD_flag, __pyx_v_VLSD_CG_name, __pyx_v_VLSD_CG_signal_data_type, __pyx_v_channel_name_set); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1474, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) { @@ -38956,7 +38956,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject if (unlikely(size != 4)) { if (size > 4) __Pyx_RaiseTooManyValuesError(4); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 1412, __pyx_L1_error) + __PYX_ERR(0, 1474, __pyx_L1_error) } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS if (likely(PyTuple_CheckExact(sequence))) { @@ -38979,7 +38979,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject Py_ssize_t i; PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; for (i=0; i < 4; i++) { - PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1412, __pyx_L1_error) + PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1474, __pyx_L1_error) __Pyx_GOTREF(item); *(temps[i]) = item; } @@ -38989,7 +38989,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject } else { Py_ssize_t index = -1; PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_8,&__pyx_t_15,&__pyx_t_14}; - __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1412, __pyx_L1_error) + __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1474, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_19 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_5); @@ -38998,7 +38998,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_GOTREF(item); *(temps[index]) = item; } - if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1412, __pyx_L1_error) + if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_5), 4) < 0) __PYX_ERR(0, 1474, __pyx_L1_error) __pyx_t_19 = NULL; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; goto __pyx_L24_unpacking_done; @@ -39006,22 +39006,22 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_19 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 1412, __pyx_L1_error) + __PYX_ERR(0, 1474, __pyx_L1_error) __pyx_L24_unpacking_done:; } - /* "dataRead.pyx":1412 + /* "dataRead.pyx":1474 * while position < data_block_length: * memcpy(&record_id_long_long, &bit_stream[position], 8) * position, buf, VLSD, index = unsorted_read4(bit_stream, tmp, record_id_long_long, 8, # <<<<<<<<<<<<<< * position, buf, VLSD, pos_byte_beg, pos_byte_end, * c_format_structure, index, CGrecordLength, */ - __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1412, __pyx_L1_error) + __pyx_t_20 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_2); if (unlikely((__pyx_t_20 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1474, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1412, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1412, __pyx_L1_error) - if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 1412, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_8))) __PYX_ERR(0, 1474, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_15))||((__pyx_t_15) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_15))) __PYX_ERR(0, 1474, __pyx_L1_error) + if (!(likely(PyDict_CheckExact(__pyx_t_14))||((__pyx_t_14) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_14))) __PYX_ERR(0, 1474, __pyx_L1_error) __pyx_v_position = __pyx_t_20; __Pyx_DECREF_SET(__pyx_v_buf, ((PyObject*)__pyx_t_8)); __pyx_t_8 = 0; @@ -39031,7 +39031,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_14 = 0; } - /* "dataRead.pyx":1409 + /* "dataRead.pyx":1471 * c_format_structure, index, CGrecordLength, * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) * elif record_id_size == 4: # <<<<<<<<<<<<<< @@ -39042,17 +39042,17 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject default: break; } - /* "dataRead.pyx":1417 + /* "dataRead.pyx":1479 * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) * # changing from bytes type to desired type * if buf: # <<<<<<<<<<<<<< * for name in buf.keys(): * buf[name] = buf[name].view(dtype=numpy_format[name]) */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_buf); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1417, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_buf); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1479, __pyx_L1_error) if (__pyx_t_7) { - /* "dataRead.pyx":1418 + /* "dataRead.pyx":1480 * # changing from bytes type to desired type * if buf: * for name in buf.keys(): # <<<<<<<<<<<<<< @@ -39062,9 +39062,9 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_3 = 0; if (unlikely(__pyx_v_buf == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "keys"); - __PYX_ERR(0, 1418, __pyx_L1_error) + __PYX_ERR(0, 1480, __pyx_L1_error) } - __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_buf, 1, __pyx_n_s_keys, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1418, __pyx_L1_error) + __pyx_t_14 = __Pyx_dict_iterator(__pyx_v_buf, 1, __pyx_n_s_keys, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1480, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = __pyx_t_14; @@ -39072,12 +39072,12 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject while (1) { __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_11, &__pyx_t_3, &__pyx_t_14, NULL, NULL, __pyx_t_12); if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1418, __pyx_L1_error) + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1480, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_14); __pyx_t_14 = 0; - /* "dataRead.pyx":1419 + /* "dataRead.pyx":1481 * if buf: * for name in buf.keys(): * buf[name] = buf[name].view(dtype=numpy_format[name]) # <<<<<<<<<<<<<< @@ -39086,33 +39086,33 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ if (unlikely(__pyx_v_buf == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1419, __pyx_L1_error) + __PYX_ERR(0, 1481, __pyx_L1_error) } - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_buf, __pyx_v_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1419, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_buf, __pyx_v_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_view); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1419, __pyx_L1_error) + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_view); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1419, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_numpy_format, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1419, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyDict_GetItem(__pyx_v_numpy_format, __pyx_v_name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 1419, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_dtype, __pyx_t_8) < 0) __PYX_ERR(0, 1481, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1419, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1481, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(__pyx_v_buf == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1419, __pyx_L1_error) + __PYX_ERR(0, 1481, __pyx_L1_error) } - if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_v_name, __pyx_t_8) < 0))) __PYX_ERR(0, 1419, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_buf, __pyx_v_name, __pyx_t_8) < 0))) __PYX_ERR(0, 1481, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":1417 + /* "dataRead.pyx":1479 * VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, channel_name_set) * # changing from bytes type to desired type * if buf: # <<<<<<<<<<<<<< @@ -39121,17 +39121,17 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ } - /* "dataRead.pyx":1421 + /* "dataRead.pyx":1483 * buf[name] = buf[name].view(dtype=numpy_format[name]) * # convert list to array for VLSD only * if VLSD: # <<<<<<<<<<<<<< * for channel_name in VLSD: * VLSD[channel_name] = np.array(VLSD[channel_name]) */ - __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_VLSD); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1421, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_VLSD); if (unlikely((__pyx_t_7 < 0))) __PYX_ERR(0, 1483, __pyx_L1_error) if (__pyx_t_7) { - /* "dataRead.pyx":1422 + /* "dataRead.pyx":1484 * # convert list to array for VLSD only * if VLSD: * for channel_name in VLSD: # <<<<<<<<<<<<<< @@ -39141,9 +39141,9 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_11 = 0; if (unlikely(__pyx_v_VLSD == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 1422, __pyx_L1_error) + __PYX_ERR(0, 1484, __pyx_L1_error) } - __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_VLSD, 1, ((PyObject *)NULL), (&__pyx_t_3), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1422, __pyx_L1_error) + __pyx_t_8 = __Pyx_dict_iterator(__pyx_v_VLSD, 1, ((PyObject *)NULL), (&__pyx_t_3), (&__pyx_t_12)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = __pyx_t_8; @@ -39151,28 +39151,28 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject while (1) { __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_6, __pyx_t_3, &__pyx_t_11, &__pyx_t_8, NULL, NULL, __pyx_t_12); if (unlikely(__pyx_t_13 == 0)) break; - if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1422, __pyx_L1_error) + if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1484, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_8); __pyx_t_8 = 0; - /* "dataRead.pyx":1423 + /* "dataRead.pyx":1485 * if VLSD: * for channel_name in VLSD: * VLSD[channel_name] = np.array(VLSD[channel_name]) # <<<<<<<<<<<<<< * buf.update(VLSD) * return buf */ - __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1423, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_np); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1423, __pyx_L1_error) + __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_array); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_15); __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; if (unlikely(__pyx_v_VLSD == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1423, __pyx_L1_error) + __PYX_ERR(0, 1485, __pyx_L1_error) } - __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_VLSD, __pyx_v_channel_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1423, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyDict_GetItem(__pyx_v_VLSD, __pyx_v_channel_name); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_14); __pyx_t_2 = NULL; __pyx_t_9 = 0; @@ -39193,31 +39193,31 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_15, __pyx_callargs+1-__pyx_t_9, 1+__pyx_t_9); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1423, __pyx_L1_error) + if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1485, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0; } if (unlikely(__pyx_v_VLSD == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1423, __pyx_L1_error) + __PYX_ERR(0, 1485, __pyx_L1_error) } - if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_v_channel_name, __pyx_t_8) < 0))) __PYX_ERR(0, 1423, __pyx_L1_error) + if (unlikely((PyDict_SetItem(__pyx_v_VLSD, __pyx_v_channel_name, __pyx_t_8) < 0))) __PYX_ERR(0, 1485, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":1424 + /* "dataRead.pyx":1486 * for channel_name in VLSD: * VLSD[channel_name] = np.array(VLSD[channel_name]) * buf.update(VLSD) # <<<<<<<<<<<<<< * return buf * */ - __pyx_t_6 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_buf, __pyx_v_VLSD); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1424, __pyx_L1_error) + __pyx_t_6 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_buf, __pyx_v_VLSD); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1486, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - /* "dataRead.pyx":1421 + /* "dataRead.pyx":1483 * buf[name] = buf[name].view(dtype=numpy_format[name]) * # convert list to array for VLSD only * if VLSD: # <<<<<<<<<<<<<< @@ -39226,7 +39226,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject */ } - /* "dataRead.pyx":1425 + /* "dataRead.pyx":1487 * VLSD[channel_name] = np.array(VLSD[channel_name]) * buf.update(VLSD) * return buf # <<<<<<<<<<<<<< @@ -39238,7 +39238,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject __pyx_r = __pyx_v_buf; goto __pyx_L0; - /* "dataRead.pyx":1323 + /* "dataRead.pyx":1385 * return buf.byteswap() * * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< @@ -39282,7 +39282,7 @@ static PyObject *__pyx_pf_8dataRead_4unsorted_data_read4(CYTHON_UNUSED PyObject return __pyx_r; } -/* "dataRead.pyx":1427 +/* "dataRead.pyx":1489 * return buf * * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< @@ -39315,7 +39315,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py int __pyx_clineno = 0; __Pyx_RefNannySetupContext("unsorted_read4", 1); - /* "dataRead.pyx":1432 + /* "dataRead.pyx":1494 * index, CGrecordLength, VLSD_flag, VLSD_CG_name, VLSD_CG_signal_data_type, * channel_name_set): * cdef unsigned long VLSDLen = 0 # <<<<<<<<<<<<<< @@ -39324,37 +39324,37 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py */ __pyx_v_VLSDLen = 0; - /* "dataRead.pyx":1433 + /* "dataRead.pyx":1495 * channel_name_set): * cdef unsigned long VLSDLen = 0 * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< * for channel_name in channel_name_set[record_id]: # list of channel classes * buf[channel_name][index[record_id]] = \ */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_flag, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1433, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_flag, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1495, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1433, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(0, 1495, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_3 = (!__pyx_t_2); if (__pyx_t_3) { - /* "dataRead.pyx":1434 + /* "dataRead.pyx":1496 * cdef unsigned long VLSDLen = 0 * if not VLSD_flag[record_id]: # not VLSD CG) * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< * buf[channel_name][index[record_id]] = \ * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_channel_name_set, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_channel_name_set, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { - __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1434, __pyx_L1_error) + __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1434, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1496, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { @@ -39363,28 +39363,28 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py { Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1496, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) + __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1496, __pyx_L1_error) #else - __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error) + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { { Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_4); #if !CYTHON_ASSUME_SAFE_MACROS - if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) + if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1496, __pyx_L1_error) #endif if (__pyx_t_5 >= __pyx_temp) break; } #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1434, __pyx_L1_error) + __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely((0 < 0))) __PYX_ERR(0, 1496, __pyx_L1_error) #else - __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1434, __pyx_L1_error) + __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1496, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } @@ -39394,7 +39394,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); - else __PYX_ERR(0, 1434, __pyx_L1_error) + else __PYX_ERR(0, 1496, __pyx_L1_error) } break; } @@ -39403,7 +39403,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py __Pyx_XDECREF_SET(__pyx_v_channel_name, __pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":1436 + /* "dataRead.pyx":1498 * for channel_name in channel_name_set[record_id]: # list of channel classes * buf[channel_name][index[record_id]] = \ * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] # <<<<<<<<<<<<<< @@ -39412,13 +39412,13 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py */ if (unlikely(__pyx_v_tmp == Py_None)) { PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 1436, __pyx_L1_error) + __PYX_ERR(0, 1498, __pyx_L1_error) } - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_beg, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_beg, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_8 = PyNumber_Add(__pyx_t_1, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; @@ -39426,15 +39426,15 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py if (__pyx_t_3) { __pyx_t_9 = 0; } else { - __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1498, __pyx_L1_error) __pyx_t_9 = __pyx_t_10; } __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_8 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_end, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_pos_byte_end, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; @@ -39442,30 +39442,30 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py if (__pyx_t_3) { __pyx_t_10 = PY_SSIZE_T_MAX; } else { - __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 1498, __pyx_L1_error) __pyx_t_10 = __pyx_t_11; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PySequence_GetSlice(__pyx_v_tmp, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1436, __pyx_L1_error) + __pyx_t_1 = PySequence_GetSlice(__pyx_v_tmp, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - /* "dataRead.pyx":1435 + /* "dataRead.pyx":1497 * if not VLSD_flag[record_id]: # not VLSD CG) * for channel_name in channel_name_set[record_id]: # list of channel classes * buf[channel_name][index[record_id]] = \ # <<<<<<<<<<<<<< * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] * index[record_id] += 1 */ - __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_buf, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1435, __pyx_L1_error) + __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_v_buf, __pyx_v_channel_name); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1435, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1497, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_t_8, __pyx_t_1) < 0))) __PYX_ERR(0, 1435, __pyx_L1_error) + if (unlikely((PyObject_SetItem(__pyx_t_7, __pyx_t_8, __pyx_t_1) < 0))) __PYX_ERR(0, 1497, __pyx_L1_error) __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":1434 + /* "dataRead.pyx":1496 * cdef unsigned long VLSDLen = 0 * if not VLSD_flag[record_id]: # not VLSD CG) * for channel_name in channel_name_set[record_id]: # list of channel classes # <<<<<<<<<<<<<< @@ -39475,7 +39475,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1437 + /* "dataRead.pyx":1499 * buf[channel_name][index[record_id]] = \ * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] * index[record_id] += 1 # <<<<<<<<<<<<<< @@ -39484,35 +39484,35 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py */ __Pyx_INCREF(__pyx_v_record_id); __pyx_t_4 = __pyx_v_record_id; - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1437, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_index, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1437, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely((PyObject_SetItem(__pyx_v_index, __pyx_t_4, __pyx_t_8) < 0))) __PYX_ERR(0, 1437, __pyx_L1_error) + if (unlikely((PyObject_SetItem(__pyx_v_index, __pyx_t_4, __pyx_t_8) < 0))) __PYX_ERR(0, 1499, __pyx_L1_error) __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1438 + /* "dataRead.pyx":1500 * tmp[position + pos_byte_beg[channel_name]:position + pos_byte_end[channel_name]] * index[record_id] += 1 * position += CGrecordLength[record_id] # <<<<<<<<<<<<<< * else: # VLSD CG * position += record_id_size */ - __pyx_t_4 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1438, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_CGrecordLength, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1438, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_CGrecordLength, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1438, __pyx_L1_error) + __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1500, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_12 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_1); if (unlikely((__pyx_t_12 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1438, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_1); if (unlikely((__pyx_t_12 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1500, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_position = __pyx_t_12; - /* "dataRead.pyx":1433 + /* "dataRead.pyx":1495 * channel_name_set): * cdef unsigned long VLSDLen = 0 * if not VLSD_flag[record_id]: # not VLSD CG) # <<<<<<<<<<<<<< @@ -39522,7 +39522,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py goto __pyx_L3; } - /* "dataRead.pyx":1440 + /* "dataRead.pyx":1502 * position += CGrecordLength[record_id] * else: # VLSD CG * position += record_id_size # <<<<<<<<<<<<<< @@ -39532,7 +39532,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py /*else*/ { __pyx_v_position = (__pyx_v_position + ((unsigned PY_LONG_LONG)__pyx_v_record_id_size)); - /* "dataRead.pyx":1441 + /* "dataRead.pyx":1503 * else: # VLSD CG * position += record_id_size * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length # <<<<<<<<<<<<<< @@ -39541,7 +39541,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py */ (void)(memcpy((&__pyx_v_VLSDLen), (&(__pyx_v_bit_stream[__pyx_v_position])), 4)); - /* "dataRead.pyx":1442 + /* "dataRead.pyx":1504 * position += record_id_size * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length * position += 4 # <<<<<<<<<<<<<< @@ -39550,56 +39550,56 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py */ __pyx_v_position = (__pyx_v_position + 4); - /* "dataRead.pyx":1443 + /* "dataRead.pyx":1505 * memcpy(&VLSDLen, &bit_stream[position], 4) # VLSD length * position += 4 * signal_data_type = VLSD_CG_signal_data_type[record_id] # <<<<<<<<<<<<<< * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes * if signal_data_type == 6: */ - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1443, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_signal_data_type, __pyx_v_record_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_signal_data_type = __pyx_t_1; __pyx_t_1 = 0; - /* "dataRead.pyx":1444 + /* "dataRead.pyx":1506 * position += 4 * signal_data_type = VLSD_CG_signal_data_type[record_id] * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes # <<<<<<<<<<<<<< * if signal_data_type == 6: * temp = temp.decode('ISO8859') */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_position, ((__pyx_v_position + __pyx_v_VLSDLen) - 1) - __pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1444, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_position, ((__pyx_v_position + __pyx_v_VLSDLen) - 1) - __pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1444, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1506, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_temp = __pyx_t_8; __pyx_t_8 = 0; - /* "dataRead.pyx":1445 + /* "dataRead.pyx":1507 * signal_data_type = VLSD_CG_signal_data_type[record_id] * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes * if signal_data_type == 6: # <<<<<<<<<<<<<< * temp = temp.decode('ISO8859') * elif signal_data_type == 7: */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_6, 6, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1445, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_6, 6, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1507, __pyx_L1_error) if (__pyx_t_3) { - /* "dataRead.pyx":1446 + /* "dataRead.pyx":1508 * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes * if signal_data_type == 6: * temp = temp.decode('ISO8859') # <<<<<<<<<<<<<< * elif signal_data_type == 7: * temp = temp.decode('utf-8') */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1446, __pyx_L1_error) + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); __pyx_t_8 = 0; - /* "dataRead.pyx":1445 + /* "dataRead.pyx":1507 * signal_data_type = VLSD_CG_signal_data_type[record_id] * temp = bytes(bit_stream[position:position + VLSDLen - 1]) # default: raw bytes * if signal_data_type == 6: # <<<<<<<<<<<<<< @@ -39609,29 +39609,29 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py goto __pyx_L7; } - /* "dataRead.pyx":1447 + /* "dataRead.pyx":1509 * if signal_data_type == 6: * temp = temp.decode('ISO8859') * elif signal_data_type == 7: # <<<<<<<<<<<<<< * temp = temp.decode('utf-8') * elif signal_data_type == 8: */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_7, 7, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1447, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_7, 7, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1509, __pyx_L1_error) if (__pyx_t_3) { - /* "dataRead.pyx":1448 + /* "dataRead.pyx":1510 * temp = temp.decode('ISO8859') * elif signal_data_type == 7: * temp = temp.decode('utf-8') # <<<<<<<<<<<<<< * elif signal_data_type == 8: * temp = temp.decode('utf-16') */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1450, __pyx_L1_error) + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1512, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); __pyx_t_8 = 0; - /* "dataRead.pyx":1449 + /* "dataRead.pyx":1511 * elif signal_data_type == 7: * temp = temp.decode('utf-8') * elif signal_data_type == 8: # <<<<<<<<<<<<<< @@ -39673,29 +39673,29 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py goto __pyx_L7; } - /* "dataRead.pyx":1451 + /* "dataRead.pyx":1513 * elif signal_data_type == 8: * temp = temp.decode('utf-16') * VLSD[VLSD_CG_name[record_id]].append(temp) */ - __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_9, 9, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1451, __pyx_L1_error) + __pyx_t_3 = (__Pyx_PyInt_BoolEqObjC(__pyx_v_signal_data_type, __pyx_int_9, 9, 0)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 1513, __pyx_L1_error) if (__pyx_t_3) { - /* "dataRead.pyx":1452 + /* "dataRead.pyx":1514 * temp = temp.decode('utf-16') # <<<<<<<<<<<<<< * VLSD[VLSD_CG_name[record_id]].append(temp) * position += VLSDLen */ - __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1452, __pyx_L1_error) + __pyx_t_8 = __Pyx_decode_bytes(__pyx_v_temp, 0, PY_SSIZE_T_MAX, NULL, NULL, __Pyx_PyUnicode_DecodeUTF16); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1514, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_8); __pyx_t_8 = 0; - /* "dataRead.pyx":1451 + /* "dataRead.pyx":1513 * elif signal_data_type == 8: * temp = temp.decode('utf-16') * VLSD[VLSD_CG_name[record_id]].append(temp) # <<<<<<<<<<<<<< * position += VLSDLen * return position, buf, VLSD, index */ - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1453, __pyx_L1_error) + __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_v_VLSD_CG_name, __pyx_v_record_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1515, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1453, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_VLSD, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1515, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_t_13 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_temp); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1453, __pyx_L1_error) + __pyx_t_13 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_temp); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 1515, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - /* "dataRead.pyx":1454 + /* "dataRead.pyx":1516 * temp = temp.decode('>utf-16') * VLSD[VLSD_CG_name[record_id]].append(temp) * position += VLSDLen # <<<<<<<<<<<<<< @@ -39731,7 +39731,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py } __pyx_L3:; - /* "dataRead.pyx":1455 + /* "dataRead.pyx":1517 * VLSD[VLSD_CG_name[record_id]].append(temp) * position += VLSDLen * return position, buf, VLSD, index # <<<<<<<<<<<<<< @@ -39739,27 +39739,27 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py * */ __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1455, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_position); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1517, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1455, __pyx_L1_error) + __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1517, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1)) __PYX_ERR(0, 1455, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_1)) __PYX_ERR(0, 1517, __pyx_L1_error); __Pyx_INCREF(__pyx_v_buf); __Pyx_GIVEREF(__pyx_v_buf); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_buf)) __PYX_ERR(0, 1455, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_buf)) __PYX_ERR(0, 1517, __pyx_L1_error); __Pyx_INCREF(__pyx_v_VLSD); __Pyx_GIVEREF(__pyx_v_VLSD); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_VLSD)) __PYX_ERR(0, 1455, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_VLSD)) __PYX_ERR(0, 1517, __pyx_L1_error); __Pyx_INCREF(__pyx_v_index); __Pyx_GIVEREF(__pyx_v_index); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_index)) __PYX_ERR(0, 1455, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_v_index)) __PYX_ERR(0, 1517, __pyx_L1_error); __pyx_t_1 = 0; __pyx_r = __pyx_t_8; __pyx_t_8 = 0; goto __pyx_L0; - /* "dataRead.pyx":1427 + /* "dataRead.pyx":1489 * return buf * * cdef inline unsorted_read4(const char* bit_stream, bytes tmp, record_id, # <<<<<<<<<<<<<< @@ -39784,7 +39784,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_unsorted_read4(char const *__py return __pyx_r; } -/* "dataRead.pyx":1458 +/* "dataRead.pyx":1520 * * * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< @@ -39855,7 +39855,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1520, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -39863,9 +39863,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1520, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 1); __PYX_ERR(0, 1458, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 1); __PYX_ERR(0, 1520, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -39873,9 +39873,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1520, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 2); __PYX_ERR(0, 1458, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 2); __PYX_ERR(0, 1520, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: @@ -39883,14 +39883,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1520, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 3); __PYX_ERR(0, 1458, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, 3); __PYX_ERR(0, 1520, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sd_data_read") < 0)) __PYX_ERR(0, 1458, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "sd_data_read") < 0)) __PYX_ERR(0, 1520, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 4)) { goto __pyx_L5_argtuple_error; @@ -39900,14 +39900,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2); values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); } - __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1458, __pyx_L3_error) + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1520, __pyx_L3_error) __pyx_v_sd_block = ((PyObject*)values[1]); - __pyx_v_sd_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_sd_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1459, __pyx_L3_error) - __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[3]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1459, __pyx_L3_error) + __pyx_v_sd_block_length = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[2]); if (unlikely((__pyx_v_sd_block_length == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1521, __pyx_L3_error) + __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[3]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1521, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1458, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("sd_data_read", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 1520, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -39921,7 +39921,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sd_block), (&PyBytes_Type), 1, "sd_block", 1))) __PYX_ERR(0, 1458, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sd_block), (&PyBytes_Type), 1, "sd_block", 1))) __PYX_ERR(0, 1520, __pyx_L1_error) __pyx_r = __pyx_pf_8dataRead_6sd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_sd_block, __pyx_v_sd_block_length, __pyx_v_n_records); /* function exit code */ @@ -39968,17 +39968,17 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("sd_data_read", 1); - /* "dataRead.pyx":1479 + /* "dataRead.pyx":1541 * array * """ * cdef const char* bit_stream = PyBytes_AsString(sd_block) # <<<<<<<<<<<<<< * cdef unsigned long max_len = 0 * cdef unsigned long vlsd_len = 0 */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_sd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1479, __pyx_L1_error) + __pyx_t_1 = PyBytes_AsString(__pyx_v_sd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1541, __pyx_L1_error) __pyx_v_bit_stream = __pyx_t_1; - /* "dataRead.pyx":1480 + /* "dataRead.pyx":1542 * """ * cdef const char* bit_stream = PyBytes_AsString(sd_block) * cdef unsigned long max_len = 0 # <<<<<<<<<<<<<< @@ -39987,7 +39987,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_max_len = 0; - /* "dataRead.pyx":1481 + /* "dataRead.pyx":1543 * cdef const char* bit_stream = PyBytes_AsString(sd_block) * cdef unsigned long max_len = 0 * cdef unsigned long vlsd_len = 0 # <<<<<<<<<<<<<< @@ -39996,7 +39996,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_vlsd_len = 0; - /* "dataRead.pyx":1482 + /* "dataRead.pyx":1544 * cdef unsigned long max_len = 0 * cdef unsigned long vlsd_len = 0 * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) # <<<<<<<<<<<<<< @@ -40005,7 +40005,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_VLSDLen = ((unsigned long *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned long))))); - /* "dataRead.pyx":1483 + /* "dataRead.pyx":1545 * cdef unsigned long vlsd_len = 0 * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) # <<<<<<<<<<<<<< @@ -40014,7 +40014,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_pointer = ((unsigned PY_LONG_LONG *)PyMem_Malloc((__pyx_v_n_records * (sizeof(unsigned PY_LONG_LONG))))); - /* "dataRead.pyx":1484 + /* "dataRead.pyx":1546 * cdef unsigned long *VLSDLen = PyMem_Malloc(n_records * sizeof(unsigned long)) * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) * cdef unsigned long long rec = 0 # <<<<<<<<<<<<<< @@ -40023,7 +40023,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_rec = 0; - /* "dataRead.pyx":1485 + /* "dataRead.pyx":1547 * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) * cdef unsigned long long rec = 0 * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< @@ -40041,16 +40041,16 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_L4_bool_binop_done:; if (unlikely(__pyx_t_2)) { - /* "dataRead.pyx":1486 + /* "dataRead.pyx":1548 * cdef unsigned long long rec = 0 * if not VLSDLen or not pointer: * raise MemoryError() # <<<<<<<<<<<<<< * try: * pointer[0] = 0 */ - PyErr_NoMemory(); __PYX_ERR(0, 1486, __pyx_L1_error) + PyErr_NoMemory(); __PYX_ERR(0, 1548, __pyx_L1_error) - /* "dataRead.pyx":1485 + /* "dataRead.pyx":1547 * cdef unsigned long long *pointer = PyMem_Malloc(n_records * sizeof(unsigned long long)) * cdef unsigned long long rec = 0 * if not VLSDLen or not pointer: # <<<<<<<<<<<<<< @@ -40059,7 +40059,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ } - /* "dataRead.pyx":1487 + /* "dataRead.pyx":1549 * if not VLSDLen or not pointer: * raise MemoryError() * try: # <<<<<<<<<<<<<< @@ -40068,7 +40068,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ /*try:*/ { - /* "dataRead.pyx":1488 + /* "dataRead.pyx":1550 * raise MemoryError() * try: * pointer[0] = 0 # <<<<<<<<<<<<<< @@ -40077,7 +40077,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ (__pyx_v_pointer[0]) = 0; - /* "dataRead.pyx":1489 + /* "dataRead.pyx":1551 * try: * pointer[0] = 0 * VLSDLen[0] = 0 # <<<<<<<<<<<<<< @@ -40086,7 +40086,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ (__pyx_v_VLSDLen[0]) = 0; - /* "dataRead.pyx":1490 + /* "dataRead.pyx":1552 * pointer[0] = 0 * VLSDLen[0] = 0 * for rec from 0 <= rec < n_records - 1 by 1: # <<<<<<<<<<<<<< @@ -40096,7 +40096,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_4 = (__pyx_v_n_records - 1); for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_4; __pyx_v_rec+=1) { - /* "dataRead.pyx":1491 + /* "dataRead.pyx":1553 * VLSDLen[0] = 0 * for rec from 0 <= rec < n_records - 1 by 1: * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< @@ -40105,7 +40105,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); - /* "dataRead.pyx":1492 + /* "dataRead.pyx":1554 * for rec from 0 <= rec < n_records - 1 by 1: * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< @@ -40114,7 +40114,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; - /* "dataRead.pyx":1493 + /* "dataRead.pyx":1555 * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) * VLSDLen[rec] = vlsd_len * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] # <<<<<<<<<<<<<< @@ -40123,7 +40123,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ (__pyx_v_pointer[(__pyx_v_rec + 1)]) = (((__pyx_v_VLSDLen[__pyx_v_rec]) + 4) + (__pyx_v_pointer[__pyx_v_rec])); - /* "dataRead.pyx":1494 + /* "dataRead.pyx":1556 * VLSDLen[rec] = vlsd_len * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< @@ -40133,7 +40133,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); if (__pyx_t_2) { - /* "dataRead.pyx":1495 + /* "dataRead.pyx":1557 * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] * if VLSDLen[rec] > max_len: * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< @@ -40142,7 +40142,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); - /* "dataRead.pyx":1494 + /* "dataRead.pyx":1556 * VLSDLen[rec] = vlsd_len * pointer[rec + 1] = VLSDLen[rec] + 4 + pointer[rec] * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< @@ -40152,7 +40152,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ } } - /* "dataRead.pyx":1496 + /* "dataRead.pyx":1558 * if VLSDLen[rec] > max_len: * max_len = VLSDLen[rec] * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) # <<<<<<<<<<<<<< @@ -40161,7 +40161,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ (void)(memcpy((&__pyx_v_vlsd_len), (&(__pyx_v_bit_stream[(__pyx_v_pointer[__pyx_v_rec])])), 4)); - /* "dataRead.pyx":1497 + /* "dataRead.pyx":1559 * max_len = VLSDLen[rec] * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) * VLSDLen[rec] = vlsd_len # <<<<<<<<<<<<<< @@ -40170,7 +40170,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ (__pyx_v_VLSDLen[__pyx_v_rec]) = __pyx_v_vlsd_len; - /* "dataRead.pyx":1498 + /* "dataRead.pyx":1560 * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) * VLSDLen[rec] = vlsd_len * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< @@ -40180,7 +40180,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_2 = ((__pyx_v_VLSDLen[__pyx_v_rec]) > __pyx_v_max_len); if (__pyx_t_2) { - /* "dataRead.pyx":1499 + /* "dataRead.pyx":1561 * VLSDLen[rec] = vlsd_len * if VLSDLen[rec] > max_len: * max_len = VLSDLen[rec] # <<<<<<<<<<<<<< @@ -40189,7 +40189,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_max_len = (__pyx_v_VLSDLen[__pyx_v_rec]); - /* "dataRead.pyx":1498 + /* "dataRead.pyx":1560 * memcpy(&vlsd_len, &bit_stream[pointer[rec]], 4) * VLSDLen[rec] = vlsd_len * if VLSDLen[rec] > max_len: # <<<<<<<<<<<<<< @@ -40198,7 +40198,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ } - /* "dataRead.pyx":1500 + /* "dataRead.pyx":1562 * if VLSDLen[rec] > max_len: * max_len = VLSDLen[rec] * if max_len != 0: # <<<<<<<<<<<<<< @@ -40208,7 +40208,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_2 = (__pyx_v_max_len != 0); if (__pyx_t_2) { - /* "dataRead.pyx":1501 + /* "dataRead.pyx":1563 * max_len = VLSDLen[rec] * if max_len != 0: * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< @@ -40226,7 +40226,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_L15_bool_binop_done:; if (__pyx_t_2) { - /* "dataRead.pyx":1502 + /* "dataRead.pyx":1564 * if max_len != 0: * if signal_data_type < 10 or signal_data_type == 17: * if signal_data_type == 6: # <<<<<<<<<<<<<< @@ -40236,7 +40236,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ switch (__pyx_v_signal_data_type) { case 6: - /* "dataRead.pyx":1503 + /* "dataRead.pyx":1565 * if signal_data_type < 10 or signal_data_type == 17: * if signal_data_type == 6: * channel_format = 'ISO8859' # <<<<<<<<<<<<<< @@ -40246,7 +40246,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __Pyx_INCREF(__pyx_n_u_ISO8859); __pyx_v_channel_format = __pyx_n_u_ISO8859; - /* "dataRead.pyx":1502 + /* "dataRead.pyx":1564 * if max_len != 0: * if signal_data_type < 10 or signal_data_type == 17: * if signal_data_type == 6: # <<<<<<<<<<<<<< @@ -40256,7 +40256,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ break; case 7: - /* "dataRead.pyx":1505 + /* "dataRead.pyx":1567 * channel_format = 'ISO8859' * elif signal_data_type == 7: * channel_format = 'utf-8' # <<<<<<<<<<<<<< @@ -40266,7 +40266,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __Pyx_INCREF(__pyx_kp_u_utf_8); __pyx_v_channel_format = __pyx_kp_u_utf_8; - /* "dataRead.pyx":1504 + /* "dataRead.pyx":1566 * if signal_data_type == 6: * channel_format = 'ISO8859' * elif signal_data_type == 7: # <<<<<<<<<<<<<< @@ -40276,7 +40276,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ break; case 8: - /* "dataRead.pyx":1507 + /* "dataRead.pyx":1569 * channel_format = 'utf-8' * elif signal_data_type == 8: * channel_format = ' max_len: * max_len = VLSDLen[rec] * if max_len != 0: # <<<<<<<<<<<<<< @@ -40405,7 +40405,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ } - /* "dataRead.pyx":1519 + /* "dataRead.pyx":1581 * return equalize_byte_length(bit_stream, pointer, VLSDLen, max_len, n_records) * else: * printf('VLSD channel could not be properly read\n') # <<<<<<<<<<<<<< @@ -40415,7 +40415,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ /*else*/ { (void)(printf(((char const *)"VLSD channel could not be properly read\n"))); - /* "dataRead.pyx":1520 + /* "dataRead.pyx":1582 * else: * printf('VLSD channel could not be properly read\n') * return None # <<<<<<<<<<<<<< @@ -40428,7 +40428,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ } } - /* "dataRead.pyx":1522 + /* "dataRead.pyx":1584 * return None * finally: * PyMem_Free(pointer) # <<<<<<<<<<<<<< @@ -40454,7 +40454,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ { PyMem_Free(__pyx_v_pointer); - /* "dataRead.pyx":1523 + /* "dataRead.pyx":1585 * finally: * PyMem_Free(pointer) * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< @@ -40481,7 +40481,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_14 = __pyx_r; __pyx_r = 0; - /* "dataRead.pyx":1522 + /* "dataRead.pyx":1584 * return None * finally: * PyMem_Free(pointer) # <<<<<<<<<<<<<< @@ -40490,7 +40490,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ PyMem_Free(__pyx_v_pointer); - /* "dataRead.pyx":1523 + /* "dataRead.pyx":1585 * finally: * PyMem_Free(pointer) * PyMem_Free(VLSDLen) # <<<<<<<<<<<<<< @@ -40504,7 +40504,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ } } - /* "dataRead.pyx":1458 + /* "dataRead.pyx":1520 * * * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< @@ -40524,7 +40524,7 @@ static PyObject *__pyx_pf_8dataRead_6sd_data_read(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } -/* "dataRead.pyx":1525 +/* "dataRead.pyx":1587 * PyMem_Free(VLSDLen) * * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< @@ -40551,35 +40551,35 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const int __pyx_clineno = 0; __Pyx_RefNannySetupContext("equalize_byte_length", 1); - /* "dataRead.pyx":1527 + /* "dataRead.pyx":1589 * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, * unsigned long max_len, unsigned long long n_records): * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< * cdef unsigned long rec = 0 * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1589, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1589, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = NULL; __pyx_t_8 = 0; @@ -40600,22 +40600,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1527, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1527, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1589, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1527, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1589, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1527, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1589, __pyx_L1_error) __pyx_v_output = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1528 + /* "dataRead.pyx":1590 * unsigned long max_len, unsigned long long n_records): * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< @@ -40624,7 +40624,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const */ __pyx_v_rec = 0; - /* "dataRead.pyx":1529 + /* "dataRead.pyx":1591 * cdef np.ndarray output = np.zeros((n_records, ), dtype='V{}'.format(max_len)) * cdef unsigned long rec = 0 * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< @@ -40634,22 +40634,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const __pyx_t_9 = __pyx_v_n_records; for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_9; __pyx_v_rec+=1) { - /* "dataRead.pyx":1530 + /* "dataRead.pyx":1592 * cdef unsigned long rec = 0 * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< * return output * */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1530, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1530, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1530, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __pyx_t_8 = 0; @@ -40670,15 +40670,15 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1530, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1592, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_4, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1530, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_4, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1592, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - /* "dataRead.pyx":1531 + /* "dataRead.pyx":1593 * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain * output[rec] = bytearray(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]).rjust(max_len, b'\x00') * return output # <<<<<<<<<<<<<< @@ -40690,7 +40690,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const __pyx_r = ((PyObject *)__pyx_v_output); goto __pyx_L0; - /* "dataRead.pyx":1525 + /* "dataRead.pyx":1587 * PyMem_Free(VLSDLen) * * cdef inline equalize_byte_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< @@ -40716,7 +40716,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_byte_length(char const return __pyx_r; } -/* "dataRead.pyx":1533 +/* "dataRead.pyx":1595 * return output * * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< @@ -40747,35 +40747,35 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con int __pyx_clineno = 0; __Pyx_RefNannySetupContext("equalize_string_length", 1); - /* "dataRead.pyx":1535 + /* "dataRead.pyx":1597 * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, * unsigned long max_len, unsigned long long n_records, channel_format): * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< * cdef unsigned long rec = 0 * cdef bytes raw */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1597, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1535, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1597, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = NULL; __pyx_t_8 = 0; @@ -40796,22 +40796,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1535, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1535, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1597, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1535, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1597, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1535, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1597, __pyx_L1_error) __pyx_v_output = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1536 + /* "dataRead.pyx":1598 * unsigned long max_len, unsigned long long n_records, channel_format): * cdef np.ndarray output = np.zeros((n_records, ), dtype='U{}'.format(max_len)) * cdef unsigned long rec = 0 # <<<<<<<<<<<<<< @@ -40820,17 +40820,17 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con */ __pyx_v_rec = 0; - /* "dataRead.pyx":1538 + /* "dataRead.pyx":1600 * cdef unsigned long rec = 0 * cdef bytes raw * if channel_format == 'bom': # <<<<<<<<<<<<<< * # signal_data_type 17: detect BOM per value * for rec from 0 <= rec < n_records by 1: */ - __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_channel_format, __pyx_n_u_bom, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1538, __pyx_L1_error) + __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_channel_format, __pyx_n_u_bom, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(0, 1600, __pyx_L1_error) if (__pyx_t_9) { - /* "dataRead.pyx":1540 + /* "dataRead.pyx":1602 * if channel_format == 'bom': * # signal_data_type 17: detect BOM per value * for rec from 0 <= rec < n_records by 1: # <<<<<<<<<<<<<< @@ -40840,81 +40840,81 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con __pyx_t_10 = __pyx_v_n_records; for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_10; __pyx_v_rec+=1) { - /* "dataRead.pyx":1541 + /* "dataRead.pyx":1603 * # signal_data_type 17: detect BOM per value * for rec from 0 <= rec < n_records by 1: * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) # <<<<<<<<<<<<<< * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1541, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1603, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1541, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1603, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_raw, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; - /* "dataRead.pyx":1542 + /* "dataRead.pyx":1604 * for rec from 0 <= rec < n_records by 1: * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: */ - __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1542, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1604, __pyx_L1_error) __pyx_t_12 = (__pyx_t_11 >= 3); if (__pyx_t_12) { } else { __pyx_t_9 = __pyx_t_12; goto __pyx_L7_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1542, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1542, __pyx_L1_error) + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1604, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_12) { } else { __pyx_t_9 = __pyx_t_12; goto __pyx_L7_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1542, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1542, __pyx_L1_error) + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1604, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_12) { } else { __pyx_t_9 = __pyx_t_12; goto __pyx_L7_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1542, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1604, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1542, __pyx_L1_error) + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1604, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = __pyx_t_12; __pyx_L7_bool_binop_done:; if (__pyx_t_9) { - /* "dataRead.pyx":1543 + /* "dataRead.pyx":1605 * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1543, __pyx_L1_error) + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1543, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1543, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1543, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1543, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1605, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1543, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -40935,14 +40935,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1543, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1543, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1605, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":1542 + /* "dataRead.pyx":1604 * for rec from 0 <= rec < n_records by 1: * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< @@ -40952,57 +40952,57 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con goto __pyx_L6; } - /* "dataRead.pyx":1544 + /* "dataRead.pyx":1606 * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: */ - __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1544, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1606, __pyx_L1_error) __pyx_t_12 = (__pyx_t_11 >= 2); if (__pyx_t_12) { } else { __pyx_t_9 = __pyx_t_12; goto __pyx_L11_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1544, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1606, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1544, __pyx_L1_error) + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1606, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_12) { } else { __pyx_t_9 = __pyx_t_12; goto __pyx_L11_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1544, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1606, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1544, __pyx_L1_error) + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1606, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = __pyx_t_12; __pyx_L11_bool_binop_done:; if (__pyx_t_9) { - /* "dataRead.pyx":1545 + /* "dataRead.pyx":1607 * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1545, __pyx_L1_error) + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1545, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1545, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1545, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1545, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1607, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1607, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1545, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -41023,14 +41023,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1545, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1607, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1545, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1607, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":1544 + /* "dataRead.pyx":1606 * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< @@ -41040,57 +41040,57 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con goto __pyx_L6; } - /* "dataRead.pyx":1546 + /* "dataRead.pyx":1608 * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') * elif len(raw) > 0: */ - __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1546, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1608, __pyx_L1_error) __pyx_t_12 = (__pyx_t_11 >= 2); if (__pyx_t_12) { } else { __pyx_t_9 = __pyx_t_12; goto __pyx_L14_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1546, __pyx_L1_error) + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1608, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_12) { } else { __pyx_t_9 = __pyx_t_12; goto __pyx_L14_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1546, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1608, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1546, __pyx_L1_error) + __pyx_t_12 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 1608, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_9 = __pyx_t_12; __pyx_L14_bool_binop_done:; if (__pyx_t_9) { - /* "dataRead.pyx":1547 + /* "dataRead.pyx":1609 * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) > 0: * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1547, __pyx_L1_error) + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1547, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1547, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1547, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1547, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1609, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1609, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1547, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -41111,14 +41111,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1547, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1547, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":1546 + /* "dataRead.pyx":1608 * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< @@ -41128,34 +41128,34 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con goto __pyx_L6; } - /* "dataRead.pyx":1548 + /* "dataRead.pyx":1610 * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') * elif len(raw) > 0: # <<<<<<<<<<<<<< * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') * else: */ - __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1548, __pyx_L1_error) + __pyx_t_11 = __Pyx_PyBytes_GET_SIZE(__pyx_v_raw); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(0, 1610, __pyx_L1_error) __pyx_t_9 = (__pyx_t_11 > 0); if (__pyx_t_9) { - /* "dataRead.pyx":1549 + /* "dataRead.pyx":1611 * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') * elif len(raw) > 0: * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * else: * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1549, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1549, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1549, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1549, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1611, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1611, __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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1549, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -41176,14 +41176,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1611, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1549, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1611, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":1548 + /* "dataRead.pyx":1610 * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') * elif len(raw) > 0: # <<<<<<<<<<<<<< @@ -41194,7 +41194,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con __pyx_L6:; } - /* "dataRead.pyx":1538 + /* "dataRead.pyx":1600 * cdef unsigned long rec = 0 * cdef bytes raw * if channel_format == 'bom': # <<<<<<<<<<<<<< @@ -41204,7 +41204,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con goto __pyx_L3; } - /* "dataRead.pyx":1551 + /* "dataRead.pyx":1613 * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') * else: * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain # <<<<<<<<<<<<<< @@ -41215,16 +41215,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con __pyx_t_10 = __pyx_v_n_records; for (__pyx_v_rec = 0; __pyx_v_rec < __pyx_t_10; __pyx_v_rec+=1) { - /* "dataRead.pyx":1552 + /* "dataRead.pyx":1614 * else: * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') # <<<<<<<<<<<<<< * return output * */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1552, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + ((__pyx_v_pointer[__pyx_v_rec]) + 4), (((__pyx_v_pointer[__pyx_v_rec]) + 4) + (__pyx_v_VLSDLen[__pyx_v_rec])) - ((__pyx_v_pointer[__pyx_v_rec]) + 4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1614, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1552, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1614, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -41245,11 +41245,11 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_v_channel_format}; __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1552, __pyx_L1_error) + if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1614, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1552, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1614, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -41270,17 +41270,17 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1552, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1614, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1552, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_rec, __pyx_t_3, unsigned long, 0, __Pyx_PyInt_From_unsigned_long, 0, 0, 0) < 0))) __PYX_ERR(0, 1614, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } } __pyx_L3:; - /* "dataRead.pyx":1553 + /* "dataRead.pyx":1615 * for rec from 0 <= rec < n_records by 1: # resize string to same length, numpy constrain * output[rec] = bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]].decode(channel_format).rstrip('\x00') * return output # <<<<<<<<<<<<<< @@ -41292,7 +41292,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con __pyx_r = ((PyObject *)__pyx_v_output); goto __pyx_L0; - /* "dataRead.pyx":1533 + /* "dataRead.pyx":1595 * return output * * cdef inline equalize_string_length(const char* bit_stream, unsigned long long *pointer, unsigned long *VLSDLen, # <<<<<<<<<<<<<< @@ -41319,7 +41319,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_equalize_string_length(char con return __pyx_r; } -/* "dataRead.pyx":1556 +/* "dataRead.pyx":1618 * * * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< @@ -41393,7 +41393,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[0]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L3_error) else goto __pyx_L5_argtuple_error; CYTHON_FALLTHROUGH; case 1: @@ -41401,9 +41401,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[1]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 1); __PYX_ERR(0, 1556, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 1); __PYX_ERR(0, 1618, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 2: @@ -41411,9 +41411,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[2]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 2); __PYX_ERR(0, 1556, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 2); __PYX_ERR(0, 1618, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 3: @@ -41421,9 +41421,9 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[3]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 3); __PYX_ERR(0, 1556, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 3); __PYX_ERR(0, 1618, __pyx_L3_error) } CYTHON_FALLTHROUGH; case 4: @@ -41431,14 +41431,14 @@ PyObject *__pyx_args, PyObject *__pyx_kwds (void)__Pyx_Arg_NewRef_FASTCALL(values[4]); kw_args--; } - else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L3_error) else { - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 4); __PYX_ERR(0, 1556, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, 4); __PYX_ERR(0, 1618, __pyx_L3_error) } } if (unlikely(kw_args > 0)) { const Py_ssize_t kwd_pos_args = __pyx_nargs; - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "vd_data_read") < 0)) __PYX_ERR(0, 1556, __pyx_L3_error) + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "vd_data_read") < 0)) __PYX_ERR(0, 1618, __pyx_L3_error) } } else if (unlikely(__pyx_nargs != 5)) { goto __pyx_L5_argtuple_error; @@ -41449,15 +41449,15 @@ PyObject *__pyx_args, PyObject *__pyx_kwds values[3] = __Pyx_Arg_FASTCALL(__pyx_args, 3); values[4] = __Pyx_Arg_FASTCALL(__pyx_args, 4); } - __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1556, __pyx_L3_error) + __pyx_v_signal_data_type = __Pyx_PyInt_As_unsigned_short(values[0]); if (unlikely((__pyx_v_signal_data_type == (unsigned short)-1) && PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L3_error) __pyx_v_vd_block = ((PyObject*)values[1]); __pyx_v_offsets_array = values[2]; __pyx_v_sizes_array = values[3]; - __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1558, __pyx_L3_error) + __pyx_v_n_records = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(values[4]); if (unlikely((__pyx_v_n_records == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1620, __pyx_L3_error) } goto __pyx_L6_skip; __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1556, __pyx_L3_error) + __Pyx_RaiseArgtupleInvalid("vd_data_read", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 1618, __pyx_L3_error) __pyx_L6_skip:; goto __pyx_L4_argument_unpacking_done; __pyx_L3_error:; @@ -41471,7 +41471,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds __Pyx_RefNannyFinishContext(); return NULL; __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vd_block), (&PyBytes_Type), 1, "vd_block", 1))) __PYX_ERR(0, 1556, __pyx_L1_error) + if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vd_block), (&PyBytes_Type), 1, "vd_block", 1))) __PYX_ERR(0, 1618, __pyx_L1_error) __pyx_r = __pyx_pf_8dataRead_8vd_data_read(__pyx_self, __pyx_v_signal_data_type, __pyx_v_vd_block, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_n_records); /* function exit code */ @@ -41509,17 +41509,17 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("vd_data_read", 1); - /* "dataRead.pyx":1579 + /* "dataRead.pyx":1641 * numpy array of decoded strings (dtype U...) or byte arrays (dtype V...) * """ * cdef const char* bit_stream = PyBytes_AsString(vd_block) # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned long long offset, size */ - __pyx_t_1 = PyBytes_AsString(__pyx_v_vd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1579, __pyx_L1_error) + __pyx_t_1 = PyBytes_AsString(__pyx_v_vd_block); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(0, 1641, __pyx_L1_error) __pyx_v_bit_stream = __pyx_t_1; - /* "dataRead.pyx":1582 + /* "dataRead.pyx":1644 * cdef unsigned long long i * cdef unsigned long long offset, size * cdef unsigned long max_len = 0 # <<<<<<<<<<<<<< @@ -41528,7 +41528,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_max_len = 0; - /* "dataRead.pyx":1585 + /* "dataRead.pyx":1647 * * # Find max_len from sizes * for i in range(n_records): # <<<<<<<<<<<<<< @@ -41540,20 +41540,20 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) { __pyx_v_i = __pyx_t_4; - /* "dataRead.pyx":1586 + /* "dataRead.pyx":1648 * # Find max_len from sizes * for i in range(n_records): * size = sizes_array[i] # <<<<<<<<<<<<<< * if size > max_len: * max_len = size */ - __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1586, __pyx_L1_error) + __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1648, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_5); if (unlikely((__pyx_t_6 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1586, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_5); if (unlikely((__pyx_t_6 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1648, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_size = ((unsigned PY_LONG_LONG)__pyx_t_6); - /* "dataRead.pyx":1587 + /* "dataRead.pyx":1649 * for i in range(n_records): * size = sizes_array[i] * if size > max_len: # <<<<<<<<<<<<<< @@ -41563,7 +41563,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_7 = (__pyx_v_size > __pyx_v_max_len); if (__pyx_t_7) { - /* "dataRead.pyx":1588 + /* "dataRead.pyx":1650 * size = sizes_array[i] * if size > max_len: * max_len = size # <<<<<<<<<<<<<< @@ -41572,7 +41572,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __pyx_v_max_len = ((unsigned long)__pyx_v_size); - /* "dataRead.pyx":1587 + /* "dataRead.pyx":1649 * for i in range(n_records): * size = sizes_array[i] * if size > max_len: # <<<<<<<<<<<<<< @@ -41582,7 +41582,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ } } - /* "dataRead.pyx":1590 + /* "dataRead.pyx":1652 * max_len = size * * if max_len == 0: # <<<<<<<<<<<<<< @@ -41592,7 +41592,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_t_7 = (__pyx_v_max_len == 0); if (__pyx_t_7) { - /* "dataRead.pyx":1591 + /* "dataRead.pyx":1653 * * if max_len == 0: * return None # <<<<<<<<<<<<<< @@ -41603,7 +41603,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_r = Py_None; __Pyx_INCREF(Py_None); goto __pyx_L0; - /* "dataRead.pyx":1590 + /* "dataRead.pyx":1652 * max_len = size * * if max_len == 0: # <<<<<<<<<<<<<< @@ -41612,7 +41612,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ } - /* "dataRead.pyx":1593 + /* "dataRead.pyx":1655 * return None * * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< @@ -41630,7 +41630,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ __pyx_L8_bool_binop_done:; if (__pyx_t_7) { - /* "dataRead.pyx":1594 + /* "dataRead.pyx":1656 * * if signal_data_type < 10 or signal_data_type == 17: * return vd_equalize_string(bit_stream, offsets_array, sizes_array, # <<<<<<<<<<<<<< @@ -41639,20 +41639,20 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":1595 + /* "dataRead.pyx":1657 * if signal_data_type < 10 or signal_data_type == 17: * return vd_equalize_string(bit_stream, offsets_array, sizes_array, * max_len, n_records, signal_data_type) # <<<<<<<<<<<<<< * else: * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, */ - __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_string(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records, __pyx_v_signal_data_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1594, __pyx_L1_error) + __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_string(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records, __pyx_v_signal_data_type); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1656, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; - /* "dataRead.pyx":1593 + /* "dataRead.pyx":1655 * return None * * if signal_data_type < 10 or signal_data_type == 17: # <<<<<<<<<<<<<< @@ -41661,7 +41661,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ */ } - /* "dataRead.pyx":1597 + /* "dataRead.pyx":1659 * max_len, n_records, signal_data_type) * else: * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, # <<<<<<<<<<<<<< @@ -41671,21 +41671,21 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ /*else*/ { __Pyx_XDECREF(__pyx_r); - /* "dataRead.pyx":1598 + /* "dataRead.pyx":1660 * else: * return vd_equalize_bytes(bit_stream, offsets_array, sizes_array, * max_len, n_records) # <<<<<<<<<<<<<< * * */ - __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_bytes(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1597, __pyx_L1_error) + __pyx_t_5 = __pyx_f_8dataRead_vd_equalize_bytes(__pyx_v_bit_stream, __pyx_v_offsets_array, __pyx_v_sizes_array, __pyx_v_max_len, __pyx_v_n_records); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1659, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_r = __pyx_t_5; __pyx_t_5 = 0; goto __pyx_L0; } - /* "dataRead.pyx":1556 + /* "dataRead.pyx":1618 * * * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< @@ -41704,7 +41704,7 @@ static PyObject *__pyx_pf_8dataRead_8vd_data_read(CYTHON_UNUSED PyObject *__pyx_ return __pyx_r; } -/* "dataRead.pyx":1601 +/* "dataRead.pyx":1663 * * * cdef inline vd_equalize_string(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< @@ -41740,35 +41740,35 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * int __pyx_clineno = 0; __Pyx_RefNannySetupContext("vd_equalize_string", 1); - /* "dataRead.pyx":1605 + /* "dataRead.pyx":1667 * unsigned short signal_data_type): * """Decode string values from VD block using offset/size pairs.""" * cdef np.ndarray output = np.zeros((n_records,), dtype='U{}'.format(max_len)) # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned long long offset */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1667, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1667, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_U, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = NULL; __pyx_t_8 = 0; @@ -41789,22 +41789,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1605, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1605, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1667, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1605, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1667, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1605, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1667, __pyx_L1_error) __pyx_v_output = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1610 + /* "dataRead.pyx":1672 * cdef unsigned long size * cdef bytes raw * if signal_data_type == 6: # <<<<<<<<<<<<<< @@ -41814,7 +41814,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * switch (__pyx_v_signal_data_type) { case 6: - /* "dataRead.pyx":1611 + /* "dataRead.pyx":1673 * cdef bytes raw * if signal_data_type == 6: * for i in range(n_records): # <<<<<<<<<<<<<< @@ -41826,20 +41826,20 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { __pyx_v_i = __pyx_t_11; - /* "dataRead.pyx":1612 + /* "dataRead.pyx":1674 * if signal_data_type == 6: * for i in range(n_records): * size = sizes_array[i] # <<<<<<<<<<<<<< * if size > 0: * offset = offsets_array[i] */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1612, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1674, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1612, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1674, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_size = ((unsigned long)__pyx_t_12); - /* "dataRead.pyx":1613 + /* "dataRead.pyx":1675 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -41849,39 +41849,39 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_13 = (__pyx_v_size > 0); if (__pyx_t_13) { - /* "dataRead.pyx":1614 + /* "dataRead.pyx":1676 * size = sizes_array[i] * if size > 0: * offset = offsets_array[i] # <<<<<<<<<<<<<< * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') * elif signal_data_type == 7: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1614, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1676, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1614, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1676, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":1615 + /* "dataRead.pyx":1677 * if size > 0: * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif signal_data_type == 7: * for i in range(n_records): */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1615, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1615, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__17, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1615, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1677, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__17, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1615, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -41902,14 +41902,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1615, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1615, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1613 + /* "dataRead.pyx":1675 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -41919,7 +41919,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * } } - /* "dataRead.pyx":1610 + /* "dataRead.pyx":1672 * cdef unsigned long size * cdef bytes raw * if signal_data_type == 6: # <<<<<<<<<<<<<< @@ -41929,7 +41929,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * break; case 7: - /* "dataRead.pyx":1617 + /* "dataRead.pyx":1679 * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') * elif signal_data_type == 7: * for i in range(n_records): # <<<<<<<<<<<<<< @@ -41941,20 +41941,20 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { __pyx_v_i = __pyx_t_11; - /* "dataRead.pyx":1618 + /* "dataRead.pyx":1680 * elif signal_data_type == 7: * for i in range(n_records): * size = sizes_array[i] # <<<<<<<<<<<<<< * if size > 0: * offset = offsets_array[i] */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1618, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1680, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1618, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1680, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_size = ((unsigned long)__pyx_t_12); - /* "dataRead.pyx":1619 + /* "dataRead.pyx":1681 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -41964,39 +41964,39 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_13 = (__pyx_v_size > 0); if (__pyx_t_13) { - /* "dataRead.pyx":1620 + /* "dataRead.pyx":1682 * size = sizes_array[i] * if size > 0: * offset = offsets_array[i] # <<<<<<<<<<<<<< * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') * elif signal_data_type == 8: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1620, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1682, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1620, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1682, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":1621 + /* "dataRead.pyx":1683 * if size > 0: * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif signal_data_type == 8: * for i in range(n_records): */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1621, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1621, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1621, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1621, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__14, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1621, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1683, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__14, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1621, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -42017,14 +42017,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1621, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1683, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1621, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1683, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1619 + /* "dataRead.pyx":1681 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42034,7 +42034,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * } } - /* "dataRead.pyx":1616 + /* "dataRead.pyx":1678 * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') * elif signal_data_type == 7: # <<<<<<<<<<<<<< @@ -42044,7 +42044,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * break; case 8: - /* "dataRead.pyx":1623 + /* "dataRead.pyx":1685 * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') * elif signal_data_type == 8: * for i in range(n_records): # <<<<<<<<<<<<<< @@ -42056,20 +42056,20 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { __pyx_v_i = __pyx_t_11; - /* "dataRead.pyx":1624 + /* "dataRead.pyx":1686 * elif signal_data_type == 8: * for i in range(n_records): * size = sizes_array[i] # <<<<<<<<<<<<<< * if size > 0: * offset = offsets_array[i] */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1624, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1624, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1686, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_size = ((unsigned long)__pyx_t_12); - /* "dataRead.pyx":1625 + /* "dataRead.pyx":1687 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42079,39 +42079,39 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_13 = (__pyx_v_size > 0); if (__pyx_t_13) { - /* "dataRead.pyx":1626 + /* "dataRead.pyx":1688 * size = sizes_array[i] * if size > 0: * offset = offsets_array[i] # <<<<<<<<<<<<<< * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') * elif signal_data_type == 9: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1626, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1626, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1688, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":1627 + /* "dataRead.pyx":1689 * if size > 0: * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif signal_data_type == 9: * for i in range(n_records): */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1627, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1627, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1627, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1627, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__15, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1627, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1689, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__15, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1627, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -42132,14 +42132,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1627, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1627, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1689, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1625 + /* "dataRead.pyx":1687 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42149,7 +42149,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * } } - /* "dataRead.pyx":1622 + /* "dataRead.pyx":1684 * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('utf-8', errors='replace').rstrip('\x00') * elif signal_data_type == 8: # <<<<<<<<<<<<<< @@ -42159,7 +42159,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * break; case 9: - /* "dataRead.pyx":1629 + /* "dataRead.pyx":1691 * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') * elif signal_data_type == 9: * for i in range(n_records): # <<<<<<<<<<<<<< @@ -42171,20 +42171,20 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { __pyx_v_i = __pyx_t_11; - /* "dataRead.pyx":1630 + /* "dataRead.pyx":1692 * elif signal_data_type == 9: * for i in range(n_records): * size = sizes_array[i] # <<<<<<<<<<<<<< * if size > 0: * offset = offsets_array[i] */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1630, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1692, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1630, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1692, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_size = ((unsigned long)__pyx_t_12); - /* "dataRead.pyx":1631 + /* "dataRead.pyx":1693 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42194,39 +42194,39 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_13 = (__pyx_v_size > 0); if (__pyx_t_13) { - /* "dataRead.pyx":1632 + /* "dataRead.pyx":1694 * size = sizes_array[i] * if size > 0: * offset = offsets_array[i] # <<<<<<<<<<<<<< * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') * elif signal_data_type == 17: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1632, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1694, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1632, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1694, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":1633 + /* "dataRead.pyx":1695 * if size > 0: * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif signal_data_type == 17: * # BOM-per-value: detect encoding from BOM bytes */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1633, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1633, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__16, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1633, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1695, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__16, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -42247,14 +42247,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1633, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1633, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1695, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1631 + /* "dataRead.pyx":1693 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42264,7 +42264,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * } } - /* "dataRead.pyx":1628 + /* "dataRead.pyx":1690 * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('utf-16-le', errors='replace').rstrip('\x00') * elif signal_data_type == 9: # <<<<<<<<<<<<<< @@ -42274,7 +42274,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * break; case 17: - /* "dataRead.pyx":1636 + /* "dataRead.pyx":1698 * elif signal_data_type == 17: * # BOM-per-value: detect encoding from BOM bytes * for i in range(n_records): # <<<<<<<<<<<<<< @@ -42286,20 +42286,20 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { __pyx_v_i = __pyx_t_11; - /* "dataRead.pyx":1637 + /* "dataRead.pyx":1699 * # BOM-per-value: detect encoding from BOM bytes * for i in range(n_records): * size = sizes_array[i] # <<<<<<<<<<<<<< * if size > 0: * offset = offsets_array[i] */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1637, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1637, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1699, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_size = ((unsigned long)__pyx_t_12); - /* "dataRead.pyx":1638 + /* "dataRead.pyx":1700 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42309,35 +42309,35 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_13 = (__pyx_v_size > 0); if (__pyx_t_13) { - /* "dataRead.pyx":1639 + /* "dataRead.pyx":1701 * size = sizes_array[i] * if size > 0: * offset = offsets_array[i] # <<<<<<<<<<<<<< * raw = bytes(bit_stream[offset:offset+size]) * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1639, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1701, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1639, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1701, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":1640 + /* "dataRead.pyx":1702 * if size > 0: * offset = offsets_array[i] * raw = bytes(bit_stream[offset:offset+size]) # <<<<<<<<<<<<<< * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') */ - __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1640, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1702, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1640, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1702, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_raw, ((PyObject*)__pyx_t_3)); __pyx_t_3 = 0; - /* "dataRead.pyx":1641 + /* "dataRead.pyx":1703 * offset = offsets_array[i] * raw = bytes(bit_stream[offset:offset+size]) * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< @@ -42350,52 +42350,52 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_13 = __pyx_t_15; goto __pyx_L19_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1641, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1641, __pyx_L1_error) + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_239, 0xEF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_15) { } else { __pyx_t_13 = __pyx_t_15; goto __pyx_L19_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1641, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1641, __pyx_L1_error) + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_187, 0xBB, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_15) { } else { __pyx_t_13 = __pyx_t_15; goto __pyx_L19_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1641, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1641, __pyx_L1_error) + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_191, 0xBF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1703, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_13 = __pyx_t_15; __pyx_L19_bool_binop_done:; if (__pyx_t_13) { - /* "dataRead.pyx":1642 + /* "dataRead.pyx":1704 * raw = bytes(bit_stream[offset:offset+size]) * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1642, __pyx_L1_error) + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 3, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1642, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1642, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1642, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1642, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1704, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1704, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1642, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -42416,14 +42416,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1642, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1642, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1704, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":1641 + /* "dataRead.pyx":1703 * offset = offsets_array[i] * raw = bytes(bit_stream[offset:offset+size]) * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: # <<<<<<<<<<<<<< @@ -42433,7 +42433,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * goto __pyx_L18; } - /* "dataRead.pyx":1643 + /* "dataRead.pyx":1705 * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< @@ -42446,43 +42446,43 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_13 = __pyx_t_15; goto __pyx_L23_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1643, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1643, __pyx_L1_error) + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1705, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_15) { } else { __pyx_t_13 = __pyx_t_15; goto __pyx_L23_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1643, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1643, __pyx_L1_error) + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1705, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_13 = __pyx_t_15; __pyx_L23_bool_binop_done:; if (__pyx_t_13) { - /* "dataRead.pyx":1644 + /* "dataRead.pyx":1706 * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error) + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1644, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1644, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1644, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1706, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__15, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1706, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1644, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -42503,14 +42503,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1644, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1706, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1644, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1706, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":1643 + /* "dataRead.pyx":1705 * if size >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[i] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: # <<<<<<<<<<<<<< @@ -42520,7 +42520,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * goto __pyx_L18; } - /* "dataRead.pyx":1645 + /* "dataRead.pyx":1707 * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< @@ -42533,43 +42533,43 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_t_13 = __pyx_t_15; goto __pyx_L26_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1645, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1645, __pyx_L1_error) + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_254, 0xFE, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1707, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_15) { } else { __pyx_t_13 = __pyx_t_15; goto __pyx_L26_bool_binop_done; } - __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1645, __pyx_L1_error) + __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_raw, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1645, __pyx_L1_error) + __pyx_t_15 = (__Pyx_PyInt_BoolEqObjC(__pyx_t_3, __pyx_int_255, 0xFF, 0)); if (unlikely((__pyx_t_15 < 0))) __PYX_ERR(0, 1707, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_13 = __pyx_t_15; __pyx_L26_bool_binop_done:; if (__pyx_t_13) { - /* "dataRead.pyx":1646 + /* "dataRead.pyx":1708 * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * else: * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') */ - __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error) + __pyx_t_4 = PySequence_GetSlice(__pyx_v_raw, 2, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1646, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1646, __pyx_L1_error) - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1646, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1708, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__16, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1708, __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_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1646, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; @@ -42590,14 +42590,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1646, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1646, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1708, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - /* "dataRead.pyx":1645 + /* "dataRead.pyx":1707 * elif size >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[i] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif size >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: # <<<<<<<<<<<<<< @@ -42607,7 +42607,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * goto __pyx_L18; } - /* "dataRead.pyx":1648 + /* "dataRead.pyx":1710 * output[i] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') * else: * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< @@ -42615,16 +42615,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * * */ /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1648, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_raw, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1648, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1648, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1648, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_errors, __pyx_n_u_replace) < 0) __PYX_ERR(0, 1710, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__14, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1710, __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_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1648, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rstrip); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; @@ -42645,16 +42645,16 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_kp_u__13}; __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1648, __pyx_L1_error) + if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1648, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_3, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1710, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } __pyx_L18:; - /* "dataRead.pyx":1638 + /* "dataRead.pyx":1700 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42664,7 +42664,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * } } - /* "dataRead.pyx":1634 + /* "dataRead.pyx":1696 * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('utf-16-be', errors='replace').rstrip('\x00') * elif signal_data_type == 17: # <<<<<<<<<<<<<< @@ -42675,7 +42675,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * default: break; } - /* "dataRead.pyx":1649 + /* "dataRead.pyx":1711 * else: * output[i] = raw.decode('utf-8', errors='replace').rstrip('\x00') * return output # <<<<<<<<<<<<<< @@ -42687,7 +42687,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * __pyx_r = ((PyObject *)__pyx_v_output); goto __pyx_L0; - /* "dataRead.pyx":1601 + /* "dataRead.pyx":1663 * * * cdef inline vd_equalize_string(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< @@ -42714,7 +42714,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_string(char const * return __pyx_r; } -/* "dataRead.pyx":1652 +/* "dataRead.pyx":1714 * * * cdef inline vd_equalize_bytes(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< @@ -42748,35 +42748,35 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *_ int __pyx_clineno = 0; __Pyx_RefNannySetupContext("vd_equalize_bytes", 1); - /* "dataRead.pyx":1655 + /* "dataRead.pyx":1717 * unsigned long max_len, unsigned long long n_records): * """Return byte-array values from VD block using offset/size pairs.""" * cdef np.ndarray output = np.zeros((n_records,), dtype='V{}'.format(max_len)) # <<<<<<<<<<<<<< * cdef unsigned long long i * cdef unsigned long long offset */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error) + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeros); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_PY_LONG_LONG(__pyx_v_n_records); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_GIVEREF(__pyx_t_1); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(0, 1717, __pyx_L1_error); __pyx_t_1 = 0; - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); - if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1655, __pyx_L1_error); + if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3)) __PYX_ERR(0, 1717, __pyx_L1_error); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_V_2, __pyx_n_s_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_t_6 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = NULL; __pyx_t_8 = 0; @@ -42797,22 +42797,22 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *_ __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8); __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1655, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1655, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtype, __pyx_t_4) < 0) __PYX_ERR(0, 1717, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1655, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1717, __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_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1655, __pyx_L1_error) + if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5numpy_ndarray))))) __PYX_ERR(0, 1717, __pyx_L1_error) __pyx_v_output = ((PyArrayObject *)__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1659 + /* "dataRead.pyx":1721 * cdef unsigned long long offset * cdef unsigned long size * for i in range(n_records): # <<<<<<<<<<<<<< @@ -42824,20 +42824,20 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *_ for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) { __pyx_v_i = __pyx_t_11; - /* "dataRead.pyx":1660 + /* "dataRead.pyx":1722 * cdef unsigned long size * for i in range(n_records): * size = sizes_array[i] # <<<<<<<<<<<<<< * if size > 0: * offset = offsets_array[i] */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1660, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_sizes_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1722, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1660, __pyx_L1_error) + __pyx_t_12 = __Pyx_PyInt_As_unsigned_long(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 1722, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_size = ((unsigned long)__pyx_t_12); - /* "dataRead.pyx":1661 + /* "dataRead.pyx":1723 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42847,34 +42847,34 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *_ __pyx_t_13 = (__pyx_v_size > 0); if (__pyx_t_13) { - /* "dataRead.pyx":1662 + /* "dataRead.pyx":1724 * size = sizes_array[i] * if size > 0: * offset = offsets_array[i] # <<<<<<<<<<<<<< * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') * return output */ - __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1662, __pyx_L1_error) + __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_offsets_array, __pyx_v_i, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1662, __pyx_L1_error) + __pyx_t_14 = __Pyx_PyInt_As_unsigned_PY_LONG_LONG(__pyx_t_4); if (unlikely((__pyx_t_14 == (unsigned PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 1724, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_v_offset = ((unsigned PY_LONG_LONG)__pyx_t_14); - /* "dataRead.pyx":1663 + /* "dataRead.pyx":1725 * if size > 0: * offset = offsets_array[i] * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') # <<<<<<<<<<<<<< * return output */ - __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1663, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_bit_stream + __pyx_v_offset, (__pyx_v_offset + __pyx_v_size) - __pyx_v_offset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1663, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1663, __pyx_L1_error) + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rjust); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1663, __pyx_L1_error) + __pyx_t_1 = __Pyx_PyInt_From_unsigned_long(__pyx_v_max_len); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = NULL; __pyx_t_8 = 0; @@ -42895,14 +42895,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *_ __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8); __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1663, __pyx_L1_error) + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } - if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1663, __pyx_L1_error) + if (unlikely((__Pyx_SetItemInt(((PyObject *)__pyx_v_output), __pyx_v_i, __pyx_t_4, unsigned PY_LONG_LONG, 0, __Pyx_PyInt_From_unsigned_PY_LONG_LONG, 0, 0, 0) < 0))) __PYX_ERR(0, 1725, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1661 + /* "dataRead.pyx":1723 * for i in range(n_records): * size = sizes_array[i] * if size > 0: # <<<<<<<<<<<<<< @@ -42912,7 +42912,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *_ } } - /* "dataRead.pyx":1664 + /* "dataRead.pyx":1726 * offset = offsets_array[i] * output[i] = bytearray(bit_stream[offset:offset+size]).rjust(max_len, b'\x00') * return output # <<<<<<<<<<<<<< @@ -42922,7 +42922,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8dataRead_vd_equalize_bytes(char const *_ __pyx_r = ((PyObject *)__pyx_v_output); goto __pyx_L0; - /* "dataRead.pyx":1652 + /* "dataRead.pyx":1714 * * * cdef inline vd_equalize_bytes(const char* bit_stream, object offsets_array, object sizes_array, # <<<<<<<<<<<<<< @@ -44938,9 +44938,9 @@ static int __Pyx_CreateStringTabAndInitStrings(void) { } /* #### Code section: cached_builtins ### */ static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 274, __pyx_L1_error) - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 428, __pyx_L1_error) - __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 1486, __pyx_L1_error) + __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 329, __pyx_L1_error) + __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 490, __pyx_L1_error) + __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 1548, __pyx_L1_error) __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 83, __pyx_L1_error) __pyx_builtin_OverflowError = __Pyx_GetBuiltinName(__pyx_n_s_OverflowError); if (!__pyx_builtin_OverflowError) __PYX_ERR(1, 83, __pyx_L1_error) __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 86, __pyx_L1_error) @@ -45030,47 +45030,47 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GOTREF(__pyx_tuple__11); __Pyx_GIVEREF(__pyx_tuple__11); - /* "dataRead.pyx":1543 + /* "dataRead.pyx":1605 * raw = bytes(bit_stream[pointer[rec]+4:pointer[rec]+4+VLSDLen[rec]]) * if len(raw) >= 3 and raw[0] == 0xEF and raw[1] == 0xBB and raw[2] == 0xBF: * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') */ - __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1543, __pyx_L1_error) + __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1605, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__14); __Pyx_GIVEREF(__pyx_tuple__14); - /* "dataRead.pyx":1545 + /* "dataRead.pyx":1607 * output[rec] = raw[3:].decode('utf-8', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFF and raw[1] == 0xFE: * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') */ - __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_utf_16_le); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 1545, __pyx_L1_error) + __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_utf_16_le); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 1607, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__15); __Pyx_GIVEREF(__pyx_tuple__15); - /* "dataRead.pyx":1547 + /* "dataRead.pyx":1609 * output[rec] = raw[2:].decode('utf-16-le', errors='replace').rstrip('\x00') * elif len(raw) >= 2 and raw[0] == 0xFE and raw[1] == 0xFF: * output[rec] = raw[2:].decode('utf-16-be', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif len(raw) > 0: * output[rec] = raw.decode('utf-8', errors='replace').rstrip('\x00') */ - __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_utf_16_be); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1547, __pyx_L1_error) + __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_utf_16_be); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 1609, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__16); __Pyx_GIVEREF(__pyx_tuple__16); - /* "dataRead.pyx":1615 + /* "dataRead.pyx":1677 * if size > 0: * offset = offsets_array[i] * output[i] = bit_stream[offset:offset+size].decode('ISO-8859-1', errors='replace').rstrip('\x00') # <<<<<<<<<<<<<< * elif signal_data_type == 7: * for i in range(n_records): */ - __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_ISO_8859_1); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 1615, __pyx_L1_error) + __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_ISO_8859_1); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 1677, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__17); __Pyx_GIVEREF(__pyx_tuple__17); @@ -45255,65 +45255,65 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { __Pyx_GIVEREF(__pyx_tuple__40); __pyx_codeobj__41 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__40, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_setstate_cython, 16, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__41)) __PYX_ERR(1, 16, __pyx_L1_error) - /* "dataRead.pyx":322 + /* "dataRead.pyx":384 * * * def read_cn_chain_fast(object fid, uint64_t first_pointer, # <<<<<<<<<<<<<< * dict si_cache, int minimal, bint channel_name_list): * """Read the CN linked list starting at first_pointer using pread(). */ - __pyx_tuple__42 = PyTuple_Pack(35, __pyx_n_s_fid, __pyx_n_s_first_pointer, __pyx_n_s_si_cache, __pyx_n_s_minimal, __pyx_n_s_channel_name_list, __pyx_n_s_fd, __pyx_n_s_pointer, __pyx_n_s_cn_hdr, __pyx_n_s_cn_dat, __pyx_n_s_cc_hdr, __pyx_n_s_cc_dat, __pyx_n_s_nread, __pyx_n_s_data_offset, __pyx_n_s_cc_data_offset, __pyx_n_s_n_extra, __pyx_n_s_n_bytes, __pyx_n_s_cn_key_uint, __pyx_n_s_si_ptr, __pyx_n_s_cc_ptr, __pyx_n_s_cn_key_neg, __pyx_n_s_cn_key, __pyx_n_s_results, __pyx_n_s_cn_dict, __pyx_n_s_cc_dict, __pyx_n_s_si_dict, __pyx_n_s_cn_name, __pyx_n_s_unit_str, __pyx_n_s_desc_str, __pyx_n_s_extra_buf, __pyx_n_s_dbl_ptr, __pyx_n_s_cc_val_buf, __pyx_n_s_cc_val_list, __pyx_n_s_i, __pyx_n_s_extra_links, __pyx_n_s_lnk); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 322, __pyx_L1_error) + __pyx_tuple__42 = PyTuple_Pack(35, __pyx_n_s_fid, __pyx_n_s_first_pointer, __pyx_n_s_si_cache, __pyx_n_s_minimal, __pyx_n_s_channel_name_list, __pyx_n_s_fd, __pyx_n_s_pointer, __pyx_n_s_cn_hdr, __pyx_n_s_cn_dat, __pyx_n_s_cc_hdr, __pyx_n_s_cc_dat, __pyx_n_s_nread, __pyx_n_s_data_offset, __pyx_n_s_cc_data_offset, __pyx_n_s_n_extra, __pyx_n_s_n_bytes, __pyx_n_s_cn_key_uint, __pyx_n_s_si_ptr, __pyx_n_s_cc_ptr, __pyx_n_s_cn_key_neg, __pyx_n_s_cn_key, __pyx_n_s_results, __pyx_n_s_cn_dict, __pyx_n_s_cc_dict, __pyx_n_s_si_dict, __pyx_n_s_cn_name, __pyx_n_s_unit_str, __pyx_n_s_desc_str, __pyx_n_s_extra_buf, __pyx_n_s_dbl_ptr, __pyx_n_s_cc_val_buf, __pyx_n_s_cc_val_list, __pyx_n_s_i, __pyx_n_s_extra_links, __pyx_n_s_lnk); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(0, 384, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__42); __Pyx_GIVEREF(__pyx_tuple__42); - __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 35, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_read_cn_chain_fast, 322, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 322, __pyx_L1_error) + __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 35, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__42, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_read_cn_chain_fast, 384, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) __PYX_ERR(0, 384, __pyx_L1_error) - /* "dataRead.pyx":527 + /* "dataRead.pyx":589 * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) * def sorted_data_read(bytes tmp, unsigned short bit_count, */ - __pyx_tuple__44 = PyTuple_Pack(12, __pyx_n_s_tmp, __pyx_n_s_bit_count, __pyx_n_s_signal_data_type, __pyx_n_s_record_format, __pyx_n_s_number_of_records, __pyx_n_s_record_byte_size, __pyx_n_s_bit_offset, __pyx_n_s_pos_byte_beg, __pyx_n_s_n_bytes, __pyx_n_s_array, __pyx_n_s_bit_stream, __pyx_n_s_swap_flag); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_tuple__44 = PyTuple_Pack(12, __pyx_n_s_tmp, __pyx_n_s_bit_count, __pyx_n_s_signal_data_type, __pyx_n_s_record_format, __pyx_n_s_number_of_records, __pyx_n_s_record_byte_size, __pyx_n_s_bit_offset, __pyx_n_s_pos_byte_beg, __pyx_n_s_n_bytes, __pyx_n_s_array, __pyx_n_s_bit_stream, __pyx_n_s_swap_flag); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(0, 589, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__44); __Pyx_GIVEREF(__pyx_tuple__44); - __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(10, 0, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sorted_data_read, 527, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(10, 0, 0, 12, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__44, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sorted_data_read, 589, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) __PYX_ERR(0, 589, __pyx_L1_error) - /* "dataRead.pyx":1323 + /* "dataRead.pyx":1385 * return buf.byteswap() * * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< * const unsigned short record_id_size, * const unsigned long long data_block_length): */ - __pyx_tuple__46 = PyTuple_Pack(28, __pyx_n_s_record, __pyx_n_s_info, __pyx_n_s_tmp, __pyx_n_s_record_id_size, __pyx_n_s_data_block_length, __pyx_n_s_bit_stream, __pyx_n_s_position, __pyx_n_s_record_id_char, __pyx_n_s_record_id_short, __pyx_n_s_record_id_long, __pyx_n_s_record_id_long_long, __pyx_n_s_buf, __pyx_n_s_VLSD, __pyx_n_s_pos_byte_beg, __pyx_n_s_pos_byte_end, __pyx_n_s_c_format_structure, __pyx_n_s_byte_length, __pyx_n_s_numpy_format, __pyx_n_s_index, __pyx_n_s_CGrecordLength, __pyx_n_s_VLSD_flag, __pyx_n_s_VLSD_CG_name, __pyx_n_s_VLSD_CG_signal_data_type, __pyx_n_s_channel_name_set, __pyx_n_s_record_id, __pyx_n_s_Channel, __pyx_n_s_name, __pyx_n_s_channel_name); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1323, __pyx_L1_error) + __pyx_tuple__46 = PyTuple_Pack(28, __pyx_n_s_record, __pyx_n_s_info, __pyx_n_s_tmp, __pyx_n_s_record_id_size, __pyx_n_s_data_block_length, __pyx_n_s_bit_stream, __pyx_n_s_position, __pyx_n_s_record_id_char, __pyx_n_s_record_id_short, __pyx_n_s_record_id_long, __pyx_n_s_record_id_long_long, __pyx_n_s_buf, __pyx_n_s_VLSD, __pyx_n_s_pos_byte_beg, __pyx_n_s_pos_byte_end, __pyx_n_s_c_format_structure, __pyx_n_s_byte_length, __pyx_n_s_numpy_format, __pyx_n_s_index, __pyx_n_s_CGrecordLength, __pyx_n_s_VLSD_flag, __pyx_n_s_VLSD_CG_name, __pyx_n_s_VLSD_CG_signal_data_type, __pyx_n_s_channel_name_set, __pyx_n_s_record_id, __pyx_n_s_Channel, __pyx_n_s_name, __pyx_n_s_channel_name); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(0, 1385, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__46); __Pyx_GIVEREF(__pyx_tuple__46); - __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_unsorted_data_read4, 1323, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 1323, __pyx_L1_error) + __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 28, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__46, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_unsorted_data_read4, 1385, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) __PYX_ERR(0, 1385, __pyx_L1_error) - /* "dataRead.pyx":1458 + /* "dataRead.pyx":1520 * * * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< * unsigned long long sd_block_length, unsigned long long n_records): * """ Reads vlsd channel from its SD Block bytes */ - __pyx_tuple__48 = PyTuple_Pack(11, __pyx_n_s_signal_data_type, __pyx_n_s_sd_block, __pyx_n_s_sd_block_length, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_max_len, __pyx_n_s_vlsd_len, __pyx_n_s_VLSDLen, __pyx_n_s_pointer, __pyx_n_s_rec, __pyx_n_s_channel_format); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1458, __pyx_L1_error) + __pyx_tuple__48 = PyTuple_Pack(11, __pyx_n_s_signal_data_type, __pyx_n_s_sd_block, __pyx_n_s_sd_block_length, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_max_len, __pyx_n_s_vlsd_len, __pyx_n_s_VLSDLen, __pyx_n_s_pointer, __pyx_n_s_rec, __pyx_n_s_channel_format); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(0, 1520, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__48); __Pyx_GIVEREF(__pyx_tuple__48); - __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sd_data_read, 1458, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 1458, __pyx_L1_error) + __pyx_codeobj__49 = (PyObject*)__Pyx_PyCode_New(4, 0, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__48, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_sd_data_read, 1520, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__49)) __PYX_ERR(0, 1520, __pyx_L1_error) - /* "dataRead.pyx":1556 + /* "dataRead.pyx":1618 * * * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< * object offsets_array, object sizes_array, * unsigned long long n_records): */ - __pyx_tuple__50 = PyTuple_Pack(10, __pyx_n_s_signal_data_type, __pyx_n_s_vd_block, __pyx_n_s_offsets_array, __pyx_n_s_sizes_array, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_i, __pyx_n_s_offset, __pyx_n_s_size, __pyx_n_s_max_len); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1556, __pyx_L1_error) + __pyx_tuple__50 = PyTuple_Pack(10, __pyx_n_s_signal_data_type, __pyx_n_s_vd_block, __pyx_n_s_offsets_array, __pyx_n_s_sizes_array, __pyx_n_s_n_records, __pyx_n_s_bit_stream, __pyx_n_s_i, __pyx_n_s_offset, __pyx_n_s_size, __pyx_n_s_max_len); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(0, 1618, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__50); __Pyx_GIVEREF(__pyx_tuple__50); - __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_vd_data_read, 1556, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 1556, __pyx_L1_error) + __pyx_codeobj__51 = (PyObject*)__Pyx_PyCode_New(5, 0, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__50, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_dataRead_pyx, __pyx_n_s_vd_data_read, 1618, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__51)) __PYX_ERR(0, 1618, __pyx_L1_error) /* "(tree fragment)":1 * def __pyx_unpickle_SymBufReader(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< @@ -46589,103 +46589,103 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; PyType_Modified(__pyx_ptype_8dataRead_SymBufReader); - /* "dataRead.pyx":108 + /* "dataRead.pyx":130 * # * * _SI_TYPE_MAP = {0: 'OTHER', 1: 'ECU', 2: 'BUS', 3: 'I/O', 4: 'TOOL', 5: 'USER'} # <<<<<<<<<<<<<< * _SI_BUS_MAP = {0: 'NONE', 1: 'OTHER', 2: 'CAN', 3: 'LIN', * 4: 'MOST', 5: 'FLEXRAY', 6: 'K_LINE', 7: 'ETHERNET', 8: 'USB'} */ - __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 130, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_int_0, __pyx_n_u_OTHER) < 0) __PYX_ERR(0, 108, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_n_u_ECU) < 0) __PYX_ERR(0, 108, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_2, __pyx_n_u_BUS) < 0) __PYX_ERR(0, 108, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_3, __pyx_kp_u_I_O) < 0) __PYX_ERR(0, 108, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_4, __pyx_n_u_TOOL) < 0) __PYX_ERR(0, 108, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_5, __pyx_n_u_USER) < 0) __PYX_ERR(0, 108, __pyx_L1_error) - if (PyDict_SetItem(__pyx_d, __pyx_n_s_SI_TYPE_MAP, __pyx_t_4) < 0) __PYX_ERR(0, 108, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_0, __pyx_n_u_OTHER) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_n_u_ECU) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_2, __pyx_n_u_BUS) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_3, __pyx_kp_u_I_O) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_4, __pyx_n_u_TOOL) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_5, __pyx_n_u_USER) < 0) __PYX_ERR(0, 130, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SI_TYPE_MAP, __pyx_t_4) < 0) __PYX_ERR(0, 130, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":109 + /* "dataRead.pyx":131 * * _SI_TYPE_MAP = {0: 'OTHER', 1: 'ECU', 2: 'BUS', 3: 'I/O', 4: 'TOOL', 5: 'USER'} * _SI_BUS_MAP = {0: 'NONE', 1: 'OTHER', 2: 'CAN', 3: 'LIN', # <<<<<<<<<<<<<< * 4: 'MOST', 5: 'FLEXRAY', 6: 'K_LINE', 7: 'ETHERNET', 8: 'USB'} * */ - __pyx_t_4 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 109, __pyx_L1_error) + __pyx_t_4 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 131, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_int_0, __pyx_n_u_NONE) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_n_u_OTHER) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_2, __pyx_n_u_CAN) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_3, __pyx_n_u_LIN) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_4, __pyx_n_u_MOST) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_5, __pyx_n_u_FLEXRAY) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_6, __pyx_n_u_K_LINE) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_7, __pyx_n_u_ETHERNET) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_int_8, __pyx_n_u_USB) < 0) __PYX_ERR(0, 109, __pyx_L1_error) - if (PyDict_SetItem(__pyx_d, __pyx_n_s_SI_BUS_MAP, __pyx_t_4) < 0) __PYX_ERR(0, 109, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_0, __pyx_n_u_NONE) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_1, __pyx_n_u_OTHER) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_2, __pyx_n_u_CAN) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_3, __pyx_n_u_LIN) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_4, __pyx_n_u_MOST) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_5, __pyx_n_u_FLEXRAY) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_6, __pyx_n_u_K_LINE) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_7, __pyx_n_u_ETHERNET) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_t_4, __pyx_int_8, __pyx_n_u_USB) < 0) __PYX_ERR(0, 131, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_SI_BUS_MAP, __pyx_t_4) < 0) __PYX_ERR(0, 131, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":322 + /* "dataRead.pyx":384 * * * def read_cn_chain_fast(object fid, uint64_t first_pointer, # <<<<<<<<<<<<<< * dict si_cache, int minimal, bint channel_name_list): * """Read the CN linked list starting at first_pointer using pread(). */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_1read_cn_chain_fast, 0, __pyx_n_s_read_cn_chain_fast, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 322, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_1read_cn_chain_fast, 0, __pyx_n_s_read_cn_chain_fast, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__43)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 384, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_read_cn_chain_fast, __pyx_t_4) < 0) __PYX_ERR(0, 322, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_read_cn_chain_fast, __pyx_t_4) < 0) __PYX_ERR(0, 384, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":527 + /* "dataRead.pyx":589 * * * @cython.boundscheck(False) # <<<<<<<<<<<<<< * @cython.wraparound(False) * def sorted_data_read(bytes tmp, unsigned short bit_count, */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_3sorted_data_read, 0, __pyx_n_s_sorted_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 527, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_3sorted_data_read, 0, __pyx_n_s_sorted_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__45)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 589, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sorted_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 527, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sorted_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 589, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1323 + /* "dataRead.pyx":1385 * return buf.byteswap() * * def unsorted_data_read4(record, info, bytes tmp, # <<<<<<<<<<<<<< * const unsigned short record_id_size, * const unsigned long long data_block_length): */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_5unsorted_data_read4, 0, __pyx_n_s_unsorted_data_read4, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1323, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_5unsorted_data_read4, 0, __pyx_n_s_unsorted_data_read4, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__47)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1385, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_unsorted_data_read4, __pyx_t_4) < 0) __PYX_ERR(0, 1323, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_unsorted_data_read4, __pyx_t_4) < 0) __PYX_ERR(0, 1385, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1458 + /* "dataRead.pyx":1520 * * * def sd_data_read(unsigned short signal_data_type, bytes sd_block, # <<<<<<<<<<<<<< * unsigned long long sd_block_length, unsigned long long n_records): * """ Reads vlsd channel from its SD Block bytes */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_7sd_data_read, 0, __pyx_n_s_sd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1458, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_7sd_data_read, 0, __pyx_n_s_sd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__49)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1458, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1520, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - /* "dataRead.pyx":1556 + /* "dataRead.pyx":1618 * * * def vd_data_read(unsigned short signal_data_type, bytes vd_block, # <<<<<<<<<<<<<< * object offsets_array, object sizes_array, * unsigned long long n_records): */ - __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_9vd_data_read, 0, __pyx_n_s_vd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1556, __pyx_L1_error) + __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_8dataRead_9vd_data_read, 0, __pyx_n_s_vd_data_read, NULL, __pyx_n_s_dataRead, __pyx_d, ((PyObject *)__pyx_codeobj__51)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1618, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_vd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1556, __pyx_L1_error) + if (PyDict_SetItem(__pyx_d, __pyx_n_s_vd_data_read, __pyx_t_4) < 0) __PYX_ERR(0, 1618, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "(tree fragment)":1 diff --git a/dataRead.pyx b/dataRead.pyx index 31494fc..de46ad6 100644 --- a/dataRead.pyx +++ b/dataRead.pyx @@ -100,88 +100,133 @@ cdef class SymBufReader: # ─── MDF4 fast metadata reader (pread + C structs) ──────────────────────────── -# Replaces the Python struct.unpack + fid.seek/read hot path for CN/CC/SI/TX. -# Uses POSIX pread() to eliminate Python file-object dispatch overhead and -# a fast ... bytes scan to avoid lxml for the common case. +# +# Goal: replace the Python struct.unpack + fid.seek/read hot path for the +# CN/CC/SI/TX block chain with a single Cython function that eliminates all +# Python overhead in the metadata-reading loop. +# +# Key techniques: +# pread() — POSIX atomic offset read; no seek, no GIL, no Python +# file-object dispatch (~575 k calls eliminated for a 36 k +# channel file). +# memcpy/cast — fields extracted directly from the raw buffer into C +# packed-struct variables; no struct.unpack tuple allocation. +# scan — fast bytes.find() scan for the common MD block pattern +# (), replacing lxml for +# >95% of files. lxml is used only for CDATA / namespaces. +# SI cache — SI blocks are cached by file offset in _si_cache so that +# shared sources (e.g., CAN bus) are read only once. +# +# Design constraints: +# • CC val/ref for cc_type 3/7-11 (formula, text-table, tab conversions) +# are left for the Python CCBlock.read_cc() path — they are rare and +# involve variable-length link arrays not worth the complexity. +# • Composition blocks (CA/CN/DS/CL/CV/CU) are post-processed in Python +# because they are recursive and apply only to a minority of channels. +# • _unique_channel_name() remains in Python — it requires full Info4 +# context (allChannelList, ChannelNamesByDG) and cannot be parallelised. # ────────────────────────────────────────────────────────────────────────────── _SI_TYPE_MAP = {0: 'OTHER', 1: 'ECU', 2: 'BUS', 3: 'I/O', 4: 'TOOL', 5: 'USER'} _SI_BUS_MAP = {0: 'NONE', 1: 'OTHER', 2: 'CAN', 3: 'LIN', 4: 'MOST', 5: 'FLEXRAY', 6: 'K_LINE', 7: 'ETHERNET', 8: 'USB'} -# C struct layout matching on-disk MDF4 little-endian packed format. -# All structs are packed (no padding) to match the binary layout. - -cdef packed struct _CNFixedHdr: # 88 bytes: 24-byte header + 8 standard links - char id[4] - uint32_t reserved - uint64_t length - uint64_t link_count - uint64_t cn_cn_next - uint64_t cn_composition - uint64_t cn_tx_name - uint64_t cn_si_source - uint64_t cn_cc_conversion - uint64_t cn_data - uint64_t cn_md_unit - uint64_t cn_md_comment - -cdef packed struct _CNData: # 72 bytes data section - uint8_t cn_type - uint8_t cn_sync_type - uint8_t cn_data_type - uint8_t cn_bit_offset - uint32_t cn_byte_offset - uint32_t cn_bit_count - uint32_t cn_flags - uint32_t cn_invalid_bit_pos - uint8_t cn_precision +# C struct layout matching the on-disk MDF4 little-endian packed format. +# All structs are declared ``packed`` so that Cython/GCC adds no padding. +# Field names match the ASAM MDF4 specification (section 4.x, Table n). +# +# Reading strategy: +# 1. pread(fd, &struct, sizeof(struct), file_offset) — reads header +# 2. data section offset = 24 + link_count * 8 — past link section +# 3. pread(fd, &data_struct, sizeof(data_struct), offset + data_offset) + +# _CNFixedHdr — 88 bytes: 24-byte common header + 8 standard CN link fields. +# Extra links (attachments, default-X) follow at offset 88 when link_count > 8. +cdef packed struct _CNFixedHdr: + char id[4] # b'##CN' + uint32_t reserved # padding (0) + uint64_t length # total block length in bytes + uint64_t link_count # number of links in link section (≥8) + # Standard links (offsets 24–87): + uint64_t cn_cn_next # next CN block in channel group (0 = last) + uint64_t cn_composition # composition block (CA/CN/DS/CL/CV/CU) or 0 + uint64_t cn_tx_name # TX block with channel name + uint64_t cn_si_source # SI block for signal source (0 if none) + uint64_t cn_cc_conversion # CC block for value conversion (0 = identity) + uint64_t cn_data # signal data block (SD/DZ/HL/DL/CG) or 0 + uint64_t cn_md_unit # TX/MD block with physical unit (0 if none) + uint64_t cn_md_comment # TX/MD block with channel comment (0 if none) + +# _CNData — 72 bytes: data section located at offset 24 + link_count*8. +cdef packed struct _CNData: + uint8_t cn_type # 0=fixed-length, 1=VLSD, 2=master, + # 3=virtual master, 4=sync, 5=MLSD, + # 6=virtual data, 7=VLSC (MDF 4.3) + uint8_t cn_sync_type # 0=none, 1=time, 2=angle, 3=distance, 4=index + uint8_t cn_data_type # 0-15, see ASAM MDF4 spec §4.18.2 + uint8_t cn_bit_offset # bit start position within first byte (0-7) + uint32_t cn_byte_offset # byte start position within the record + uint32_t cn_bit_count # total bit width of channel in the record + uint32_t cn_flags # bitmask; bit 17 (0x20000) = CN_F_DATA_STREAM_MODE + uint32_t cn_invalid_bit_pos # bit position of invalidation flag in the record + uint8_t cn_precision # display decimal precision (0xFF = default) uint8_t cn_reserved - uint16_t cn_attachment_count - double cn_val_range_min - double cn_val_range_max - double cn_limit_min - double cn_limit_max - double cn_limit_ext_min - double cn_limit_ext_max - -cdef packed struct _CCFixedHdr: # 56 bytes: 24-byte header + 4 standard links - char id[4] + uint16_t cn_attachment_count # number of AT attachment references + double cn_val_range_min # raw (record) value range minimum + double cn_val_range_max # raw (record) value range maximum + double cn_limit_min # physical limit minimum + double cn_limit_max # physical limit maximum + double cn_limit_ext_min # extended limit minimum + double cn_limit_ext_max # extended limit maximum + +# _CCFixedHdr — 56 bytes: 24-byte header + 4 standard CC link fields. +# Additional cc_ref links follow at offset 56 when link_count > 4. +cdef packed struct _CCFixedHdr: + char id[4] # b'##CC' uint32_t reserved uint64_t length - uint64_t link_count - uint64_t cc_tx_name - uint64_t cc_md_unit - uint64_t cc_md_comment - uint64_t cc_cc_inverse - -cdef packed struct _CCData: # 24 bytes data section - uint8_t cc_type - uint8_t cc_precision - uint16_t cc_flags - uint16_t cc_ref_count - uint16_t cc_val_count + uint64_t link_count # number of links (≥4) + uint64_t cc_tx_name # TX block with conversion name (0 if none) + uint64_t cc_md_unit # TX/MD block with unit (0 if none) + uint64_t cc_md_comment # TX/MD block with comment (0 if none) + uint64_t cc_cc_inverse # inverse CC block (0 if none) + +# _CCData — 24 bytes: data section at offset 24 + link_count*8. +# cc_val doubles and cc_ref links follow after this section. +cdef packed struct _CCData: + uint8_t cc_type # 0=identity, 1=linear, 2=rational, 3=formula, + # 4=tab-interp, 5=tab, 6=range→value, + # 7=value→text, 8=range→text, 9=text→value, + # 10=text→text, 11=bitfield-text + uint8_t cc_precision # decimal places for display (0xFF = inherit from CN) + uint16_t cc_flags # bitmask + uint16_t cc_ref_count # number of cc_ref links beyond the 4 standard links + uint16_t cc_val_count # number of cc_val double entries double cc_phy_range_min double cc_phy_range_max -cdef packed struct _SIBlock: # 56 bytes total (header + 3 links + data) - char id[4] +# _SIBlock — 56 bytes total: 24-byte header + 3 link fields + 8 data bytes. +cdef packed struct _SIBlock: + char id[4] # b'##SI' uint32_t reserved uint64_t length - uint64_t link_count - uint64_t si_tx_name - uint64_t si_tx_path - uint64_t si_md_comment - uint8_t si_type - uint8_t si_bus_type - uint8_t si_flags + uint64_t link_count # always 3 + uint64_t si_tx_name # TX block with source name + uint64_t si_tx_path # TX block with source path + uint64_t si_md_comment # MD/TX block with comment + uint8_t si_type # 0=OTHER, 1=ECU, 2=BUS, 3=I/O, 4=TOOL, 5=USER + uint8_t si_bus_type # 0=NONE, 1=OTHER, 2=CAN, 3=LIN, 4=MOST, + # 5=FLEXRAY, 6=K_LINE, 7=ETHERNET, 8=USB + uint8_t si_flags # bit 0 = simulated source char si_reserved[5] -cdef packed struct _TXHdr: # 24 bytes - char id[4] +# _TXHdr — 24-byte common header shared by TX (plain text) and MD (XML) blocks. +# The text/XML payload immediately follows at offset 24. +cdef packed struct _TXHdr: + char id[4] # b'##TX' (plain text) or b'##MD' (XML) uint32_t reserved - uint64_t length - uint64_t link_count + uint64_t length # total block length in bytes (header + payload) + uint64_t link_count # always 0 for TX/MD cdef str _fast_read_tx(int fd, uint64_t pointer): @@ -219,11 +264,21 @@ cdef str _fast_read_tx(int fd, uint64_t pointer): cdef str _fast_read_tx_or_md(int fd, uint64_t pointer): - """Read TX or MD block via pread. + """Read a TX or MD block and return its text content. + + TX blocks + The payload bytes are decoded directly as UTF-8 (ignoring errors) + and returned after stripping trailing null bytes. - TX blocks: return text directly. - MD blocks: fast ... bytes scan (covers >95% of real MDF4 files). - Returns '' if pointer is 0, read fails, or scan finds no TX element. + MD blocks (XML) + A fast ``bytes.find()`` scan looks for ```` in the raw + payload. This handles the standard ```` + and ```` patterns that cover >95% of + real MDF4 files. If the scan fails (CDATA sections, namespace + prefixes, nested elements), the full payload is passed to + ``lxml.objectify`` as a fallback. + + Returns '' if *pointer* is 0, the read fails, or no TX text is found. """ cdef _TXHdr hdr cdef Py_ssize_t content_len, nread, tx_start, tx_end, end @@ -289,9 +344,16 @@ cdef str _fast_read_tx_or_md(int fd, uint64_t pointer): cdef dict _fast_read_si(int fd, uint64_t pointer): - """Read SI block and return a dict matching the SIBlock format. + """Read an SI block and return a dict matching the ``SIBlock`` Python format. + + The returned dict contains the same keys as ``SIBlock.read_si()`` would + produce, so it can be stored directly in ``info._si_cache`` and later + assigned to ``info['CN'][dg][cg][cn]['SI']``. + + The ``source_name`` and ``source_path`` sub-dicts are populated by reading + the linked TX blocks via :func:`_fast_read_tx`. - Returns None if pointer is 0 or read fails. + Returns ``None`` if *pointer* is 0 or the pread fails. """ cdef _SIBlock si cdef Py_ssize_t nread diff --git a/mdfreader/mdfinfo4.py b/mdfreader/mdfinfo4.py index c9957b3..2500373 100644 --- a/mdfreader/mdfinfo4.py +++ b/mdfreader/mdfinfo4.py @@ -1,12 +1,43 @@ # -*- coding: utf-8 -*- -""" Measured Data Format blocks parser for version 4.x - -Created on Sun Dec 15 12:57:28 2013 +"""MDF4 block structure parser (version 4.x). :Author: `Aymeric Rateau `__ -mdfinfo4 --------------------------- +This module parses the *metadata* of MDF 4.x files — all block types +(HD, DG, CG, CN, CC, SI, TX, MD, AT, EV, …) — and stores them in a +nested ``Info4`` dict. It does **not** read channel sample data; that +is handled by ``mdf4reader.py``. + +Architecture +------------ +The module provides two reading paths for the CN/CC/SI/TX hot path: + +**Fast path (Cython, default when compiled)** + ``read_cn_chain_fast()`` from ``dataRead.pyx`` walks the full CN + linked list for a channel group in a single C-level loop using + POSIX ``pread()`` for all file I/O (no Python file-object dispatch, + no GIL during reads). Struct fields are extracted with ``memcpy`` + into typed C packed structs. TX/MD block text is decoded with a + fast ```` bytes scan before falling back to ``lxml``. + The SI block cache (``_si_cache``) prevents redundant reads when + multiple channels share the same source. + +**Python fallback path** + ``read_cn_block()`` / ``read_cn_blocks()`` use ``struct.unpack`` + and the ``SymBufReader`` bidirectional file buffer. This path is + used when ``dataRead`` is not compiled or when the file object has + no ``fileno()`` (e.g. an in-memory buffer). + +Key classes +----------- +``Info4`` + Top-level parser. Inherits from ``dict``; call + ``Info4(file_name)`` to fully parse a file. +``CNBlock``, ``CCBlock``, ``SIBlock``, ``CommentBlock`` + Individual block parsers used by the Python fallback path. +``DSBlock``, ``CLBlock``, ``CVBlock``, ``CUBlock`` + MDF 4.3 composition block parsers (data-stream, channel-list, + channel-variant, channel-union). """ from struct import calcsize, unpack, pack, Struct from os import remove @@ -1914,33 +1945,62 @@ def write(self, fid, data): class Info4(dict): - __slots__ = ['fileName', 'fid', 'filterChannelNames', 'zipfile', '_si_cache'] - """ information block parser fo MDF file version 4.x + """MDF4 file structure parser — nested dict of all metadata blocks. + + Parses the complete block graph of an MDF 4.x file and stores the + result as a nested ``dict``. Either *file_name* or *fid* must be + provided. Attributes - -------------- - file_name : str - name of file - fid - file identifier - zipfile - flag to indicate the mdf4 is packaged in a zip - - Notes - -------- - mdfinfo(FILENAME) contains a dict of structures, for - each data group, containing key information about all channels in each - group. FILENAME is a string that specifies the name of the MDF file. - Either file name or fid should be given. - General dictionary structure is the following - - - mdfinfo['HD'] header block - - mdfinfo['DG'][dataGroup] Data Group block - - mdfinfo['CG'][dataGroup][channelGroup] Channel Group block - Channel block including text blocks for comment and identifier - - mdfinfo['CN'][dataGroup][channelGroup][channel] - Channel conversion information - - mdfinfo['CC'][dataGroup][channelGroup][channel]""" + ---------- + fileName : str + Path to the MDF file. + fid : file object + Underlying binary file identifier (``None`` after the constructor + closes it when opened from *file_name*). + filterChannelNames : bool + Strip module-name prefix (everything up to the last ``'.'``) from + channel names when ``True``. + zipfile : bool + ``True`` when the MDF was stored inside a ZIP archive (the file is + temporarily extracted and deleted after parsing). + _si_cache : dict + File-offset → SI block dict cache shared across all channel reads + within one file. Prevents redundant ``pread()`` calls for sources + referenced by many channels. + + Dictionary layout + ----------------- + After construction the object exposes the following keys: + + ``self['HD']`` + Header block dict. + ``self['DG'][dg]`` + Data Group block dict, keyed by integer data-group index *dg*. + ``self['CG'][dg][cg]`` + Channel Group block dict, keyed by (*dg*, *cg*). + ``self['CN'][dg][cg][cn]`` + Channel block dict. The key *cn* is + ``cn_byte_offset * 8 + cn_bit_offset`` for normal channels, or + ``-pointer`` for channels with flag ``CN_F_DATA_STREAM_MODE``. + ``self['CC'][dg][cg][cn]`` + Channel Conversion block dict for the same channel. + ``self['AT']`` + Attachment block dict. + ``self['VLSD'][dg][cg]`` + List of *cn* keys whose data is stored as Variable Length Signal Data. + ``self['VLSD_CG'][record_id]`` + Mapping from VLSD CG record ID to ``{'cg_cn': (cg, cn)}``. + ``self['MLSD'][dg][cg]`` + Dict mapping MLSD channel key to the corresponding signal-data CN key. + ``self['masters']`` + Dict of master-channel pointer → ``{'name': str, 'channels': set}``. + ``self['allChannelList']`` + Set of all unique channel names across all data groups. + ``self['ChannelNamesByDG'][dg]`` + Set of channel names within data group *dg* (used for deduplication). + """ + __slots__ = ['fileName', 'fid', 'filterChannelNames', 'zipfile', '_si_cache'] def __init__(self, file_name=None, fid=None, filter_channel_names=False, minimal=0): """ info4 class constructor From 821b5ff3e3cc3b162a32e25853010a29f7976948 Mon Sep 17 00:00:00 2001 From: Aymeric Rateau Date: Thu, 9 Apr 2026 13:02:00 +0200 Subject: [PATCH 4/4] docs: overhaul Sphinx documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit conf.py: - Bump version to 4.3, copyright year to 2025 - Switch theme to sphinx_rtd_theme - Add sphinx.ext.viewcode, autosummary; configure autodoc_default_options - Add intersphinx mappings (Python, NumPy) - Remove missing _static path warning docs/index.rst: - Add quick-start code example and pip/source installation snippet - Architecture table mapping each module to its responsibility - Channel dict structure table - Integrated 'performance' page into toctree docs/performance.rst (new): - Benchmark table: 1.9s → 0.6s on 36k-channel file - Detailed explanation of all three optimisations: pread()+C-structs CN chain reader, SymBufReader, single-call readinto() - How to verify the fast path is active Per-module index.rst files: - mdfreader: Mdf vs MdfInfo purpose, typical usage snippets - mdf: channel dict layout table, field constant reference - mdfinfo4: reading-path comparison table, Info4 dict structure example - mdf4reader: key classes, data block type table, conversion type table - mdfinfo3: MDF3 block key reference - mdf3reader: MDF3 vs MDF4 differences - channel: method reference table Co-Authored-By: Claude Sonnet 4.6 --- docs/channel/index.rst | 30 +++++++- docs/conf.py | 48 ++++++++----- docs/index.rst | 126 +++++++++++++++++++++++++++++----- docs/mdf/index.rst | 51 +++++++++++++- docs/mdf3reader/index.rst | 14 +++- docs/mdf4reader/index.rst | 85 ++++++++++++++++++++++- docs/mdfinfo3/index.rst | 28 +++++++- docs/mdfinfo4/index.rst | 53 ++++++++++++++- docs/mdfreader/index.rst | 31 ++++++++- docs/performance.rst | 139 ++++++++++++++++++++++++++++++++++++++ 10 files changed, 558 insertions(+), 47 deletions(-) create mode 100644 docs/performance.rst diff --git a/docs/channel/index.rst b/docs/channel/index.rst index 68c4260..d4ca00d 100644 --- a/docs/channel/index.rst +++ b/docs/channel/index.rst @@ -1,8 +1,34 @@ -channel module documentation +channel — per-channel record layout ===================================== +This module provides :class:`~mdfreader.channel.Channel4` and +:class:`~mdfreader.channel.Channel3`, which encapsulate the record-level +layout of a single channel within its channel group. + +These objects are created once during reading and cached in the +:class:`~mdfreader.mdf4reader.Mdf4Record` / +:class:`~mdfreader.mdf3reader.Mdf3Record` structures. They expose helper +methods used by the data readers: + +.. list-table:: + :widths: 30 70 + :header-rows: 1 + + * - Method + - Returns + * - ``unit(info)`` + - Physical unit string from CC or CN block + * - ``desc(info)`` + - Channel description from CN comment block + * - ``conversion(info)`` + - CC block dict for raw→physical conversion + * - ``calc_bytes(info)`` + - Aligned byte width of channel in the record + * - ``set(info)`` + - Populate all attributes from the ``Info4`` dict + .. automodule:: mdfreader.channel :members: :undoc-members: :show-inheritance: - + :member-order: bysource diff --git a/docs/conf.py b/docs/conf.py index 62c09c5..4b1f077 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -20,13 +20,17 @@ # -- General configuration ----------------------------------------------------- -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon', 'numpydoc', 'sphinx.ext.intersphinx', - 'sphinx.ext.coverage'] +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.napoleon', + 'sphinx.ext.viewcode', + 'sphinx.ext.intersphinx', + 'sphinx.ext.autosummary', + 'sphinx.ext.coverage', + 'numpydoc', +] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] @@ -34,24 +38,17 @@ # The suffix of source filenames. source_suffix = '.rst' -# The encoding of source files. -#source_encoding = 'utf-8-sig' - # The master toctree document. master_doc = 'index' # General information about the project. project = u'mdfreader' -copyright = u'2018, Aymeric Rateau' +copyright = u'2025, Aymeric Rateau' -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# # The short X.Y version. -version = '4.0' +version = '4.3' # The full version, including alpha/beta/rc tags. -release = '4.0' +release = '4.3' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -92,7 +89,7 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = 'default' +html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the @@ -121,7 +118,7 @@ # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] +html_static_path = [] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. @@ -250,4 +247,19 @@ # Your Name - author name in the pdf napoleon_numpy_docstring = True -numpydoc_show_class_members = False \ No newline at end of file +numpydoc_show_class_members = False + +# autodoc defaults +autodoc_default_options = { + 'members': True, + 'undoc-members': True, + 'show-inheritance': True, + 'member-order': 'bysource', +} +autodoc_typehints = 'description' + +# intersphinx: link to numpy, Python docs +intersphinx_mapping = { + 'python': ('https://docs.python.org/3', None), + 'numpy': ('https://numpy.org/doc/stable', None), +} \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 3092b92..7e6eecd 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,34 +1,126 @@ -.. mdfreader documentation master file, created by - sphinx-quickstart on Wed Dec 10 23:56:46 2014. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. +mdfreader |version| documentation +=================================== -Welcome to mdfreader's documentation! -===================================== +**mdfreader** is a Python library for reading and writing MDF files +(Measured Data Format, versions 3.x and 4.x), the standard binary format +used in automotive ECU data logging (INCA, CANape, CANoe). -Contents: +.. code-block:: python -.. toctree:: - :maxdepth: 3 + import mdfreader - mdfreader/index + # Read all channels + mdf = mdfreader.Mdf('recording.mf4') + time = mdf.get_channel_data('t') + speed = mdf.get_channel_data('vehicle_speed') - mdf/index + # Inspect the file structure without loading data + info = mdfreader.MdfInfo('recording.mf4') - mdf3reader/index + # List channels grouped by master (raster) + print(mdf.masterChannelList) - mdfinfo3/index + # Resample and export + mdf.resample(sampling=0.01) + mdf.export_to_csv('output.csv') - mdf4reader/index +Quick-start +----------- - mdfinfo4/index +Install from PyPI (binary wheel includes the Cython extension):: + + pip install mdfreader + +Build from source (recommended for development):: + + pip install cython numpy + python setup.py build_ext --inplace + pip install -e . + +.. seealso:: + + :ref:`genindex`, :ref:`modindex` + +Architecture +------------ + +mdfreader is split into two layers per MDF version: + +.. list-table:: + :widths: 30 70 + :header-rows: 1 + * - Module + - Responsibility + * - :mod:`mdfreader.mdfreader` + - Top-level :class:`~mdfreader.mdfreader.Mdf` and + :class:`~mdfreader.mdfreader.MdfInfo` classes; dispatch by file version + * - :mod:`mdfreader.mdf` + - :class:`~mdfreader.mdf.MdfSkeleton` base class; channel dict structure, + export methods, resampling, plotting + * - :mod:`mdfreader.mdfinfo4` + - MDF4 metadata parser (:class:`~mdfreader.mdfinfo4.Info4`); reads all + block types (HD/DG/CG/CN/CC/SI/TX/MD/AT/EV) into a nested dict + * - :mod:`mdfreader.mdf4reader` + - MDF4 sample-data reader; sorted/unsorted records, DT/DZ/DL/HL blocks, + VLSD/VLSC strings, channel conversion + * - :mod:`mdfreader.mdfinfo3` + - MDF3 metadata parser + * - :mod:`mdfreader.mdf3reader` + - MDF3 sample-data reader + * - :mod:`mdfreader.channel` + - :class:`~mdfreader.channel.Channel4` / + :class:`~mdfreader.channel.Channel3` — per-channel record layout helper + * - ``dataRead`` (Cython) + - Low-level fast helpers: :func:`read_cn_chain_fast`, + :class:`SymBufReader`, :func:`sorted_data_read`, bit-exact decoders. + See :doc:`performance`. + +Channel dict structure +---------------------- + +After reading, each channel in the :class:`~mdfreader.mdfreader.Mdf` dict +has the following keys: + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - Key + - Description + * - ``data`` + - :class:`numpy.ndarray` of channel samples + * - ``unit`` + - Physical unit string (e.g. ``'m/s'``) + * - ``master`` + - Name of the master channel for this raster + * - ``masterType`` + - Master type: ``1``\ =time, ``2``\ =angle, ``3``\ =distance, ``4``\ =index + * - ``description`` + - Free-text channel description + * - ``conversion`` + - Raw→physical conversion dict (present when ``convert_after_read=False``) + * - ``id`` + - ``(dg, cg, cn)`` index tuple into the :class:`~mdfreader.mdfinfo4.Info4` dict + +Contents +-------- + +.. toctree:: + :maxdepth: 2 + + performance + mdfreader/index + mdf/index + mdf4reader/index + mdfinfo4/index + mdf3reader/index + mdfinfo3/index channel/index Indices and tables -================== +------------------ * :ref:`genindex` * :ref:`modindex` * :ref:`search` - diff --git a/docs/mdf/index.rst b/docs/mdf/index.rst index 71374dc..dc259cd 100644 --- a/docs/mdf/index.rst +++ b/docs/mdf/index.rst @@ -1,7 +1,54 @@ -mdf module documentation -===================================== +mdf — base class and channel dict +================================== + +:mod:`mdfreader.mdf` provides :class:`~mdfreader.mdf.MdfSkeleton`, the base +class inherited by all version-specific readers. It defines the channel dict +structure, all export methods, resampling, and plotting. + +Channel dict layout +------------------- + +After reading, the :class:`~mdfreader.mdf.MdfSkeleton` object (a ``dict`` +subclass) stores one entry per channel: + +.. code-block:: python + + mdf['channel_name'] = { + 'data': numpy_array, + 'unit': 'm/s', + 'master': 'time_master', + 'masterType': 1, # 1=time, 2=angle, 3=distance, 4=index + 'description': 'Vehicle speed', + # present only when convert_after_read=False: + 'conversion': {'type': 1, 'parameters': {'cc_val': [0.0, 1.0]}}, + 'id': ((dg, cg, cn), (name, source, path), (grp, gs, gp)), + } + +Key constants (importable from :mod:`mdfreader.mdf`): + +.. list-table:: + :widths: 30 70 + :header-rows: 1 + + * - Constant + - Dict key it names + * - ``dataField`` + - ``'data'`` + * - ``unitField`` + - ``'unit'`` + * - ``masterField`` + - ``'master'`` + * - ``masterTypeField`` + - ``'masterType'`` + * - ``descriptionField`` + - ``'description'`` + * - ``conversionField`` + - ``'conversion'`` + * - ``idField`` + - ``'id'`` .. automodule:: mdfreader.mdf :members: :undoc-members: :show-inheritance: + :member-order: bysource diff --git a/docs/mdf3reader/index.rst b/docs/mdf3reader/index.rst index 401dc0b..d62485f 100644 --- a/docs/mdf3reader/index.rst +++ b/docs/mdf3reader/index.rst @@ -1,7 +1,19 @@ -mdf3reader module documentation +mdf3reader — MDF3 sample-data reader ===================================== +This module reads sample data from MDF 3.x files. +Metadata is parsed by :mod:`mdfreader.mdfinfo3`. + +MDF3 differences from MDF4 +--------------------------- + +* No compressed data blocks (DZ/DL/HL are MDF4 features) +* Channel conversion types differ — cc\_type 0 is linear (not identity) +* No VLSD or VLSC string channels +* No Source Information (SI) blocks + .. automodule:: mdfreader.mdf3reader :members: :undoc-members: :show-inheritance: + :member-order: bysource diff --git a/docs/mdf4reader/index.rst b/docs/mdf4reader/index.rst index 77cbe6e..3cf085f 100644 --- a/docs/mdf4reader/index.rst +++ b/docs/mdf4reader/index.rst @@ -1,7 +1,90 @@ -mdf4reader module documentation +mdf4reader — MDF4 sample-data reader ===================================== +This module reads the *sample data* from MDF 4.x files. +Metadata is parsed separately by :mod:`mdfreader.mdfinfo4`. + +Key classes +----------- + +:class:`~mdfreader.mdf4reader.Mdf4` + Version-4 reader. Inherits from :class:`~mdfreader.mdf.MdfSkeleton` + and is mixed into :class:`~mdfreader.mdfreader.Mdf`. + +:class:`~mdfreader.mdf4reader.Mdf4Record` + Per-channel-group record layout. Built once during reading; holds + dtype, byte offsets and channel references. The + :meth:`~mdfreader.mdf4reader.Mdf4Record.read_all_channels_sorted_record` + method reads all records in a single ``readinto()`` call. + +Data block types +---------------- + +.. list-table:: + :widths: 15 85 + :header-rows: 1 + + * - Block + - Description + * - DT + - Plain data (sorted records concatenated) + * - DZ + - Deflate/transposed-deflate or LZ4/ZStandard compressed data + * - HL + - Header list grouping DL blocks + * - DL + - Data list: ordered sequence of DT/DZ blocks for one channel group + * - SD + - Signal data for VLSD channels (variable-length strings/arrays) + * - DV/DI + - Data Values / Data Invalidation (unsorted records with record IDs) + +Conversion types +---------------- + +Raw-to-physical conversion (``cc_type`` in the CC block) is applied after +reading when ``convert_after_read=True`` (default): + +.. list-table:: + :widths: 10 20 70 + :header-rows: 1 + + * - Type + - Name + - Description + * - 0 + - Identity + - No conversion; raw value is the physical value + * - 1 + - Linear + - ``phys = a0 + a1 * raw`` + * - 2 + - Rational + - Six-coefficient rational function + * - 3 + - Formula + - Algebraic formula (requires ``sympy``) + * - 4 + - Tab (interpolated) + - Piecewise-linear table with interpolation + * - 5 + - Tab (no interpolation) + - Step table + * - 6 + - Range → value + - Maps value ranges to scalar outputs + * - 7 + - Value → text + - Maps discrete values to strings + * - 8 + - Range → text + - Maps value ranges to strings + * - 9–11 + - Text ↔ value/text + - Text input or output conversions + .. automodule:: mdfreader.mdf4reader :members: :undoc-members: :show-inheritance: + :member-order: bysource diff --git a/docs/mdfinfo3/index.rst b/docs/mdfinfo3/index.rst index bec7965..e6e5456 100644 --- a/docs/mdfinfo3/index.rst +++ b/docs/mdfinfo3/index.rst @@ -1,7 +1,31 @@ -mdfinfo3 module documentation -===================================== +mdfinfo3 — MDF3 metadata parser +================================ + +This module parses the block structure of MDF 3.x files. +The result is stored in an :class:`~mdfreader.mdfinfo3.Info3` nested dict, +analogous to :class:`~mdfreader.mdfinfo4.Info4` for MDF4. + +MDF3 uses different block names than MDF4: + +.. list-table:: + :widths: 30 70 + :header-rows: 1 + + * - Key + - Description + * - ``info['HDBlock']`` + - Header block + * - ``info['DGBlock'][dg]`` + - Data group block + * - ``info['CGBlock'][dg][cg]`` + - Channel group block + * - ``info['CNBlock'][dg][cg][cn]`` + - Channel block + * - ``info['CCBlock'][dg][cg][cn]`` + - Channel conversion block .. automodule:: mdfreader.mdfinfo3 :members: :undoc-members: :show-inheritance: + :member-order: bysource diff --git a/docs/mdfinfo4/index.rst b/docs/mdfinfo4/index.rst index 6acded3..8ed01b7 100644 --- a/docs/mdfinfo4/index.rst +++ b/docs/mdfinfo4/index.rst @@ -1,7 +1,56 @@ -mdfinfo4 module documentation -===================================== +mdfinfo4 — MDF4 metadata parser +================================ + +This module parses the *block structure* of MDF 4.x files and stores the +result in the nested :class:`~mdfreader.mdfinfo4.Info4` dict. It does not +read sample data (that is handled by :mod:`mdfreader.mdf4reader`). + +Reading paths +------------- + +Two paths exist for the CN/CC/SI/TX metadata hot loop. The fast path is +selected automatically when the ``dataRead`` Cython extension is available. +See :doc:`../performance` for a full description. + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - Path + - Description + * - **Fast (Cython)** + - ``read_cn_chain_fast()`` — ``pread()`` + C packed structs, ```` + bytes scan, SI cache. Active when ``_CN_CHAIN_FAST`` is ``True``. + * - **Fallback (Python)** + - :meth:`~mdfreader.mdfinfo4.Info4.read_cn_block` — ``struct.unpack`` + via :class:`~mdfreader.mdfinfo4.CNBlock` / + :class:`~mdfreader.mdfinfo4.CCBlock` / :class:`~mdfreader.mdfinfo4.SIBlock`. + +Info4 dict structure +-------------------- + +.. code-block:: python + + info = mdfreader.MdfInfo('file.mf4') + + info['HD'] # header block + info['DG'][dg] # data group block + info['CG'][dg][cg] # channel group block + info['CN'][dg][cg][cn] # channel block + info['CC'][dg][cg][cn] # conversion block + info['AT'] # attachment blocks + info['VLSD'][dg][cg] # list of VLSD channel keys + info['VLSD_CG'][record_id] # VLSD CG → (cg, cn) + info['MLSD'][dg][cg] # MLSD channel cross-reference + info['masters'] # master channel registry + info['allChannelList'] # set of all channel names + info['ChannelNamesByDG'][dg] # set of channel names per data group + +Block parsers +------------- .. automodule:: mdfreader.mdfinfo4 :members: :undoc-members: :show-inheritance: + :member-order: bysource diff --git a/docs/mdfreader/index.rst b/docs/mdfreader/index.rst index 58cde40..2d8eb53 100644 --- a/docs/mdfreader/index.rst +++ b/docs/mdfreader/index.rst @@ -1,7 +1,34 @@ -mdfreader module documentation -===================================== +mdfreader — top-level API +========================= + +This module provides the two public entry points: + +:class:`~mdfreader.mdfreader.Mdf` + The main class for reading, writing, converting and exporting MDF files. + Inherits from :class:`~mdfreader.mdf4reader.Mdf4` and + :class:`~mdfreader.mdf3reader.Mdf3`, which in turn inherit from + :class:`~mdfreader.mdf.MdfSkeleton`. + + Typical usage:: + + import mdfreader + mdf = mdfreader.Mdf('file.mf4') + data = mdf.get_channel_data('speed') + mdf.resample(0.01) + mdf.export_to_csv('output.csv') + +:class:`~mdfreader.mdfreader.MdfInfo` + Read-only parser that extracts the block structure of an MDF file + without loading sample data. Useful for listing channels, inspecting + metadata, or checking file integrity before a full read. + + Typical usage:: + + info = mdfreader.MdfInfo('file.mf4') + channels = info.list_channels() .. automodule:: mdfreader.mdfreader :members: :undoc-members: :show-inheritance: + :member-order: bysource diff --git a/docs/performance.rst b/docs/performance.rst new file mode 100644 index 0000000..2024dd0 --- /dev/null +++ b/docs/performance.rst @@ -0,0 +1,139 @@ +.. _performance: + +Performance +=========== + +When the ``dataRead`` Cython extension is compiled, mdfreader applies three +complementary optimisations that together give a **3–5× speedup** on large +MDF4 files compared to the pure-Python path. + +Benchmark (184 MB, 36 000-channel MDF4 file) +--------------------------------------------- + +.. list-table:: + :widths: 45 20 20 + :header-rows: 1 + + * - Scenario + - Wall time + - Speedup + * - Pure Python (no Cython) + - ~1.9 s + - 1× + * - v4.2 with Cython (bit-exact reader only) + - ~1.9 s + - 1× + * - v4.3 with all optimisations + - **~0.6 s** + - **~3×** + +Optimisation 1 — Fast CN/CC/SI/TX metadata reader +-------------------------------------------------- + +**Function:** ``read_cn_chain_fast()`` in ``dataRead.pyx`` + +**Called from:** :meth:`~mdfreader.mdfinfo4.Info4.read_cn_blocks` + +MDF4 channel metadata is organised as a singly-linked list of CN blocks. +For a 36 000-channel file this involves: + +* ~575 000 ``fid.seek()`` + ``fid.read()`` Python call pairs +* ~36 000 ``struct.unpack()`` calls per channel +* ~36 000 ``lxml.objectify`` XML parses for unit/description MD blocks +* ~36 000 SI-block reads (often duplicated — same source for many channels) + +``read_cn_chain_fast()`` replaces all of the above with a single C-level loop: + +``pread()`` + POSIX atomic offset-based read (````). No ``seek()``, no GIL + acquired during I/O, no Python file-object method dispatch. Each block + is read in one syscall directly into a C stack buffer. + +C packed structs + All MDF4 block fields are extracted with ``memcpy`` into typed + ``cdef packed struct`` variables matching the on-disk little-endian + layout. No ``struct.unpack()`` tuple allocation, no intermediate + ``bytes`` object. + +Fast ```` scan + Unit and description text lives in MD blocks (XML) of the form + ``text``. A plain ``bytes.find()`` scan + for ```` / ```` handles >95 % of real files without invoking + the XML parser. ``lxml`` is only called for CDATA sections or + namespace-qualified elements. + +SI-block cache + Source Information blocks are shared across many channels (e.g. all + channels from one CAN bus share the same SI block). Results are stored + in ``Info4._si_cache`` (keyed by file offset) so each unique source is + read and decoded only once. + +Unchanged paths (Python) + * ``_unique_channel_name()`` — requires full ``Info4`` context. + * Composition blocks (CA/CN/DS/CL/CV/CU) — recursive, rare. + * CC val/ref for complex types (cc\_type 3, 7–11) — variable-length + link arrays; handled by :class:`~mdfreader.mdfinfo4.CCBlock`. + +Optimisation 2 — SymBufReader (bidirectional file buffer) +--------------------------------------------------------- + +**Class:** ``SymBufReader`` in ``dataRead.pyx`` + +**Called from:** :meth:`~mdfreader.mdfinfo4.Info4.__init__` + +MDF4 metadata blocks are written in reverse order (newest first) and linked +by backward-pointing file offsets. Python's default ``BufferedReader`` +fills its buffer *forward* from the current position, so every backward seek +past the buffer boundary causes a kernel ``read()`` call. + +``SymBufReader`` keeps a **64 KB buffer centred on the current position** +(mirroring the Rust `mdfr` library design). Seeks within ±32 KB of the +last fill position are served from the C-level ``unsigned char`` buffer +without any kernel interaction. The buffer is stored as a C array (not a +Python ``bytes`` object) to avoid allocation and GC pressure. + +.. code-block:: python + + # Transparent drop-in for fid: + from dataRead import SymBufReader + reader = SymBufReader(fid) + reader.seek(offset) + data = reader.read(88) # served from buffer if within ±32 KB + +Optimisation 3 — Single-call record read (sorted data) +------------------------------------------------------ + +**Function:** :meth:`~mdfreader.mdf4reader.Mdf4Record.read_all_channels_sorted_record` + +For sorted channel groups (the common case), all records for the group are +read in **one** ``readinto()`` call into a pre-allocated flat ``uint8`` +buffer. The buffer is then reinterpreted as a structured NumPy record array +via ``.view()``. This eliminates the per-chunk Python loop that previously +issued thousands of ``fid.read()`` calls for large data blocks. + +.. code-block:: python + + raw = numpy.empty(total_size, dtype='u1') + fid.readinto(raw) # single syscall + return raw.view(record_dtype).view(recarray)[:n_records] + +Building the Cython extension +----------------------------- + +The extension is built automatically by ``setup.py`` when Cython and NumPy +are available:: + + pip install cython numpy + python setup.py build_ext --inplace + +If compilation fails, mdfreader falls back to the pure-Python path (with +``bitarray`` for bit-exact channel reading). A ``ImportWarning`` is issued +at import time to alert you. + +To verify the fast path is active: + +.. code-block:: python + + from mdfreader.mdfinfo4 import _CN_CHAIN_FAST, _SYMBUF_AVAILABLE + print('fast CN reader:', _CN_CHAIN_FAST) + print('SymBufReader:', _SYMBUF_AVAILABLE)

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ిUJ+VORJ0woLW7zBjSj(=w|p%RVw|7Zw;cC2>Lj&4X}PeL@>@n7sa zL_2=qpdH_~A!;T5h!j6=$QteVd&8yBj>fCej>fCej`!&j+Dh`wznQtDpc`ibg|p~S zMI=h4s^gCzB=7?2+6&cDK|xkWFXsc(1DxRH{PsX_0T|idUlv!SWian7q|@<1X+;_Y z+s;Co2UE3*v^Y}(P#0dTfh{;iI-9wrNVhVb3F<=hor}gQDCSt)oTf<2VY5eGyi{~u zldcyH2hIy|4KJQWbS7S$1!Jc|T332Zla7^MQ>1I9=QUFDd>O7o=Zk&IanqGbvHk$S zwLltBf1xHVtiMW;R@I-V0hALfssYymS9QfwOG#b+(VomjPi}d^AU^(S?_3 ziIyDLRwqYVJ`@Op(t!0h@y2B2Gl8%e-vk8xML_6WG?!}exy7rAr~_d&?bbKJ-E~!z zGYD12&a4O?gkzN(qDGYW=aCZj7xE`GPR9Vhnq|F_jxA zHxM>d4k3hU$lW3}jjsG6G75M?(!!D70fe3oP||vX(t3~3)AtHQS|EtDni*-4gVJhd zqy>UV3+R0%Ef7Rnz>%u@3qt22G3vj!MCv67te1#G*GdpXIL(Z3KoH?HgK$I^Ac!oG zijoBgA`9SIl`P&+n_i*P{nYz8yMk4!D+mR>rGkJ4)mBUc0U2wiYDK8%yqcIRdgmAC zv*^#!M+g1GMcJ0S80(iG`I*-*AJWBLtobVd%|mTxH^H&Hy?@b1@I{&pe-pcGJ8`la z!OP+YWYis*oCf3kB3E)#oOG8L9gvZKO!2Z}yuA!{50S4fUQ+^JRq0sOtSMS@A1iGo zGlD^whSASPPIqj%95KP|UIRn}yRiN`aj(|zqZ;moiYpb!)s>2_s?`pv93yMHF)+f8 zgf>*}5pT!4hKtH})?NKYJu~F)@pmJ5JU#~tBf=7uEyU!v`n~C(pTNz7Pkc-6Av_Q{ zMwr1dKv_gJwkUNph0vowsmQ&AoQY@u{0D4I+atidO)(g~-qB5->z|QWPmG=opOM;; zcKs7G%ZSml;kz@JLjF^wbIRQC+ht>j(X;$BFu`*D6Y4J^CeMUpPNaTjWdb1tS#QP< z@ymZJ#f4oF*du!W!M7vw@Rgz7zxAg~dSe5KJoB+-6#Z?Uw=%k!8$#Q0oJ_u9dID$I z6Vf}lqaN24GgLj1dUk@pZx`|ZBTp=lQd*2?hK_IsEa985h3OUPM#xz-{>+2%XCD4T zp0b(r*rSoW`epws@9zJg2~vuW5m0P&DK5GclSHiMpB}{mKTcBB{yF)x-%<>PI^R=qzk5It!hP&cf%SQwTZeF1R#XCUyAz-gbHx0+aU229x%R z^$LSY8!MZly<#8MwkfK^KJ<=xS&+bE-iT}*>4^N^el1j^j-j`Iupldjg9Xd8fu76L z`?E>=)628%eJ(FLUR+l?$BP$a+X7usvMrmmt>jcT=~PMk(yR=&FTI&<>hmVB*jZd3 z)$f^Y<+Eo+-`em_Er`CD&1J<Ht9^oylhzJyt}q!k%-sB4sI~2I)ml_ z*>oI`znY`v<@`A^3eLfV4c=w(cGBndOO279hSLm=shOFw(};thVGJfyQK&A`gXG+2 zHJpc`aC}ew6eunj(%)u>_V(N8aOX!>2|#XDWH)>1-H}sNE1rUhII>(cSWFzQg;pcB zT1wU4+E83VUD}d@lU&=MEVxM}z|Dd=aW3LfRK~yw0A3x0?w#HV>6Pf;y_KAe!qPqp zPU_;!VR|_mAQi(usa2)3xO*rQE1)+q-G`5J0LI6i7+k`L833HI<+}uz!3hAo9RJ~P z7K%4G3qUUWR1D=DU?^syAYQ0YySwcw2hm<7Cj@w7OywHxdU8GhU+w9@Okg(yOR0hQ z)hEgQ39?0BC4#Mrw53wAt(GWfQSfr9Wrc=ZrHv6rNUJHN6-=7wwPHGEXGb85WST0; zG!09psgg`nnSwH%3%F98t`r|JVj@bfl)q`t@*|igOHB>s4vVRe#$_m-1j1d%P*;J-0eFhh&aPbvnj+)I1~^79bD}YEUz&K_p8R zg8muHMS4Y2&6T8@hb7fqNvgTjA@cS?wV@l57!r0R*1S%M70ZqhWRjn6stTnkQS&T+SaYTZLSkG1ft8Rr|T{qQ44jPr766`JE4#)eq{`;G7m#9-Zr} zWRpPKi78Hnwp2Z<&I281*7HIFQy%|iWoq+*}%em_#cb>ZjdEm?{lmw?#Ap+-8Ap$2+Ap&Pl zAp)mOEnwwh4 zh!&={sO48s0sRmE-7Me!k+tX_`-ut1LCL9tm|2;uNk*T=3bSYowHI|?3!e+2s3rv2 zot>%GK@aaGnn2kz2peb2!D8-~35C05q;NP?6t_QP2!})!!e&eg+p&(XY>_Nm7GZ=` zlwg^xMoBhm6~cC{o;YNxCvHzLMz^O^A!F>S8GAR0e?Z!uApkK*=R$FG1cwz}HZR$?J;NOFRTh zE}?pfXAq)lEOVi1ET3|TP{k7nk2Urq@TwZiG;#@0c!+pB^S@Q^pzPmakd9w&ttd$Y zO7aaQ1W8INO$d9aJ+_DW6{aYc5?zvTh9&31QKNpIf5Ec6g_+yF#AWK*x+F)@#F{8= z1BOQ}1C_Rx4o2v6w(58^NYbS2fFup6E|8=X9s)@o(J@<)q$Lm}X|myfBu#h@kR+S7 z|IPm}{Vw4+s}eB2(##tHWdQmd5lc=ENF#3F1mJ{m_&>E#abfTwO_WpV=l=ZbmPaNL z=|5m%aw0NUCRA&q??AWb&5LcK(>K0Drd1y$_Cw<;U6VE~-BpC&qwb2gw1geZwAthX9%AEsQS2 z*G1mYrc5*n_c$}UfH!a>Z}-`(2;$9pE$-1!>cTy~WeSJPH1(!OX0cwaqeWJWdvsZv z2n%a9dDx&W?$Kpy>9DOMrZ~i%=exWxB#u8Ee%>(^k*bEZ)I1cAZ;d~nTEF#7p zcSrZByVh5D>u@Q$x3u5{su?7sHu3#`vTqajI5Dz_15V-|Cq|}_^P__GWFguEJy$y$8I1|lz-T|5TajK--SPOH zECcmx*CJgR0(gU=6O+KI<-czkiF>>jc}IPEgbcSK>}W5tGmu(f>EdOxb~ZDufynCA zYC@#c&+l({J2R+yFc8_oo1R*fLj9Au_y`-!4hPq=6Z*uT?}P-n#{`E^wGMU}YT+J% zb5QB$`PDWBZp<7bFyc+zObXGOb5CQMh3jDarJE1ORuTHK?3XHLHs-3b3xh`F$u3$e@ z{Hc2AS+YZ!hCEezO)!sU|3J$Fl64bc^I-gR89iObF3kp!(`DRr88uzT3|FQZHdcPJ zP{ddQNyKm^Vz?49T;`ffB#9WVL=0CVRuIMtJ&OW}j{>t^rtA74&s-2jlP%xAsGy9y zqZsao051Y(uiuG#j|Y;djlcnAu5vqQddWo22o{%irpdj2c!b{lyT|*tim$0w0i+Tffd=%~c(Z|&3h#rOG4Ac?bhkxEOD^2vF{PRSIOOJHj zhE*WTbN#h|^s&krIWOZSsbVMTf?m900FDTwVwhqsOU1`z+H+5 z5U9DkE6iFxubDmrVPMrwQzx7^*BTbxO!G-O9hk0|KoJI?{JDahpXu#N5}y zWcIY8;moB~K`SaMju)PhEyb!t6&G69lzGYPT4B5qnk)89xiOi35F-(pp3S|FQ-?$~1vnQW;v3Q*)45sHNd}LR`X04`B~>CSX=}4=?CeTEp>=wJVp=-C zj%3YWXIbStEK6-oVas-Z>LeV<9aXxdjhZp@M)sfaM)sc(ifO1Zcx8zG$sY|{1F$u? zU(K%pEDY%Ab`YSa(r!qF?R+ZkH!}jbaXVhhw%z!(b|&+g=>MwpGUbuRC{^5$%h9o;5BL|8 z8I&2ni2qwd5Deo*92Q4cQY)mfCm|Zc*vh^`4C67NcM!Qqu$v803*$#b6mdh=7{*S9 zOJNv|S7R8B*Id}H%VjZ)2YzV^Dj3G){}l|QA4Dd2#ks&M!l>8W=nR^B1TJufzZ`f) zkd`}m#S6eIf^@;bE3N=u5u_CkUXkELkX&%$7>vOnjVa!sF@_sT_X3Or(%#amnsl}F z9SqqZy;Ihf_%~#tZTU#R4nZ1OK1gE>2h|@7j3G#4>u=Dc4fXdb(%$;>HO6p0?p+tI zHkBtepzvg6UjPd6V&A)#|Ca%UtSEK;9MKBc@Ul`_i(ng5uzPv!{ayv117TTwIKhU) z?*ukP?*WB2R2K^5x1u)s@FZ2%AIpIBY~4)KZa)bFP8iQVcSC*gSgj{FdKr6UjnAXHb# zmjPjZ#X1t!RczKAn=3|Ay*09OoJKH?tNf6J4=eX-!d^f@L1=SVUu{yd?_HCKahwF> zKaxsaU*Zn*&_@Esu?sPdUGn840XaCs$8xoqcf`Rsj>7hzH%fgZaC|9@BLv(G0+vQV zd?E$h%m^3+5pXjjU=XUy&v3bUMpbMO=2t*C&5UqB*jou%G&8a=7{{P>{~Y&o{hVEe z#yH+VCjX5=A@Kr9xmxx4t07o?F_<`{fMx2fMGVri_$LYu{fX*cKyu*FQuRS%)t47F zm=vVNIG-n^gR1(2#Og03-2gyx5Yo~FKw4IGMIofG6y0E}0O>}6kRGEgVU8)@A#+x5 zhx%~fQoR>e7rJeLq?4b4eP~v(#L_M z`Z#duJ`SV}xDH(kv{O|DkmgscQgF;wsx5)Ex#Ckr`m{n?6G-DKrz()7AYL1xcpuYgcgDia+e85rs926O<+?ZrsQm4e_uh+~QSLH{rz6h`E32yGUt6w2OcaX2xn_ zSha0QU6$GJbXskH9hWE6q%k)O&;wt*!|`AJzfGP)0KvZ50KvYozF~mij}<_$Z|r<+ zYm++ce5{REmVF_4pX!L$#@n0?6WpACD4TRBzimM+M4yhjZNZFe&<8xy#pzmt7s4Gnnqd zVTXr|ji{JRWZ+~>`9N$_*;n;$nBO6AT;&!*0@>%msomw#oMWD~ni+`M;JoN&BjK{e zJ4}Q(EYg9hxel=zQU^Fvz#9@wosd8g1tEb(6j$vCfH*`X02@*y*fMZM(o~70sm$0Y z#WpB5U76J4S_}-r^h)`g<}5#g6%bZxA9_7i^uT4E$|VMl4A@|FYJZIgq9$^Ib?ZW8 z5J9JdVqFAu+J)v!G39kD3UQ?l5RiaU1)T{7N+XaBoVc2ik+UFpIR#?jL_RH)d|HI% z(?ZFog;W{xjzBG;8uRqqthb=gw}X-G|E z(Zsa4Y65c`J73TXBQ;;(@&{abncP6YpqPtfOuiB`1sYWc5b%s{_hwqtSDJd?dh?jo zdG$C=#qxPjeU)sSNHzRdW)=fui|PY7(}V9OFo!TO!0#@Iy4W|&7)}7?7lfa{3?jrZ zGqxxe0`)Dz+@cZRaPQ>q(MtdRsP5#RikU|!n(45#8H#2uCL^C4&0Jj29*X8zrgc$> zaJ6)082{H5m(PSa7L^|h6RNRs;c_T}Ik-O|!0+#|6E&F_KKKMG!xPU6#P8V`@cc=% zy?ok{v9+A{t&MF_^S&*ykLh2RIxEw!kpziD1)E+k(?D-McOj{ZRdY$1PsZ$gQgkP! zlE|>wD8@4?HbccbI971ikqN>CM@DsSvhV=9-OGQO1{T zl&)+eMn6RfX8URcWD8ayY{cq`!=ZZOf}JtC-I@yd&^BglZzP^WPB|8+uw31o@Z{CM zlfdf2{N)mtgK0yTX2$=s8JF&g&ZXxPpd0Rr(WSe>bm_T7>V{LWuAky{{keqfh6kcP z8N&MI60`GOUPUfpb2iAj8ovD5Mf&9ux0m>fzvI{u2--`$1d1zSFY!H4atT-Q24Z~& zb&NRPAIgRPE$bF2SjI0+F$HZU?WbolGN_*o21&zbf5T1qi>H zzf~)?G_Oh}{KhwwT39yrAm~H>)Ak`m`1MOqr>BEBoXRv*oPBNLq<0a#Ku^KNsTnLHrzbl80!TO(_Tsu#aL> zqQfUSWMj_-@tYFasu6u#BRdIa+8NoU3Bz%$SE=XcMAz%5HnHv+;&-y(f`<5AC}@Kl za=kY3wsB$C($6jyO&bchPDA{HQp2?2-|j_zHN;PzB@!nJ@cfIzBhNW_+B-b*EUndz zCj{}EW@KX^ejjQAO&ebRm6jnY6e>3%em0n<4OeSk1@W`o21N{noM8{)h|BPeU5KBF zMnU|hN9SpX-)0@XHf?CV7UE|pbwT`+I{(Z&ObbP3vR-{$upg>sh2G2aU6vNY!kGej zI5n~mKbH*`+#x2#_Aw!TA?|RL%^Y48WeDPTm(3s{eq(T45ze*9O$G7ejnIPiTjqVl zjn+*C*Fvzp2KH@2{3b+}@$E(4O7dp=Vh zPEI!`L?)4QSHT_!;`e7ZGBIsPy8r-O@HnN0sJv(yh^n~~>C6y7R1BRE6;>_(Z!9Ar zepezLEX41}HiSLx`ABOG@w4;*;uma33dHYTeB?01@6YXir9k|+6XHVrn%H20_z^0k zCeywX5`W0&W$0wYx2V!=xgdThnF;ptE-8>-`~2r*ZLvuJ0burqe1|#0V31;*!zHn+IIWz5Dl~^xdRsXyj~fY^}>}b zxE2o1#o}&+a4ssD!%LIbmkwl88&Q6dPTP80c&E#N`mG2N8(;A;kfqWS;KSZ9*%ky~ zkCK^003I*-%s~LUEG+=^0!s_Uk~5a(iUo*6#$s=O{*GNR8w4OWEY=lY6!d}qIKFS0 z3<3~LdrQu01fa72yt>$Lz- zL&*UE#pLG`o03wM_UC4fg46m}Y#7Xu0%LYtW6Ufaj9FG0U$tM86Ps2F0eGeGhU_Iy zN=zbp?w#a2gy?ljcarb8ujG&{QtChe1~C!=IM&~*zPRHWDGMr3? zp(a-OF(s2kRI(TMOB*};k<+o8s^f?ox|+(!Wae$lDl4(=w2$;N?;LOO(g?sUdKs<| zfOkKr5P*hi5r751HuW-$0CebC2*4nuZUo>XHgO^V*8wpH=a_d~p+Rl|{0Dz+1fcs` zWA$2N?-sy+k=zKt3%@g&4Fh0?>Fh0&tNomqh^n%ePHIA3^W`$U=1fi*Wb@ zKR*ciDyDN^Wl*&WlJGkIIIlH_aGTF33~GM<2^uYIJk&dpzlTbqJ^mTOc0f4eA0;m8 zXu*g2+Tjli(UIdUU80S?cDPOQ3`|&iXOf?4!l%hyymojO%owUTYBJY&?eMjtp4u>8 z&*Fu+RJe{Delc>W9B;530+!Jw0Zi%y)LlaAqRIl&8GodLAdM`L%!AY>xk=q|y(zhq z*#~JS$|Eo85`pw-vTI66T~pg>9}pxoJY~1>C=Ssm(&h9Z1wk65N)E1?0F^Y9cq5R8 z7R^);q?tu?G-*!JDMdP^Bm}OW#itbn>2yhNg7ZM?T{>RDQ^uFB(4-Zm=N0KZEOIEW zYo)9R25%qKk>)^!HD{1Ug@xqzmI^YK?_}Mf>Yc1Xv~EondNJq4ouZ4_8ABbyq0s!n z(ixudTN9Dfx?rSCt49}pNUUR<UliZ#HP^1ZfA{(U*)nrZxUT0{L zx+!i>(KW&A^ekR2lkhF2C-fwIK6mT&!V`^Q(MzVCJcL^P(05}03N*~3_{uo80anJ3 z#HrmdXqX>a-XkG%as6WB2!}D|+Pu%=dkY=E1BX#*`9VZ)uuN?t?Rm7dePk51ucIPk zBl*A0`(57sh-kPBn$?9%3!}fz^OhE_Dnx5ug_}vi@vnLJTXSvMQTB)owD#EsMyeu> z{*VWwaL+#&fBxY==3#g7_TA4Y8*IPVHrSYF3P#yhbE30F6>DZrQN`~R)v<0CdcE}7 z=S4KGJu^m=i_YkB(CY*O`KxU=7Xtg-j%Fc7ZsTH-&~2kXRbZdn(M`3%K00hu?0}c+ zodf91v!Xxj_4Ttzef_b1uD8efw~|?`x01tBwO~Oy6T?z_Qn{kplRBD(#>q?COJJO) z_O2+b-_6%eZBMwVEtJL}mtV5?4Dc&z2Z1y`nRZNnG1`vXmVd(<{F~pPEl!Utkd3DW zk&Ud!8zVJ5T*)(*WH}LO&kc?lV!kVdcsFvK zN4k$kRqok!!OP)+Ico#^0dz+(`?&TqN7n^%s2sQfhvjH0<>0$gkfz~+z|?;o1(72` z3VReT%$>g2Rw>HX$Ps>}Baxff{_<|x65R^E3$PcqWc{RM{a7;G1)Hm6El{$$J7c^R z`Zze=Sx1?QxFKOm!*ZBsRK9{@r)qB&Oa@003N9E%)W^t`NAlI3$xSk1Y%1Da1i9?i z0|;vpUptK4;;c(?P6S10QdMOKH0;jy+egnU<4J8IJt86W0!IRE*$AEf)9Cq!dK?iRx$}s? z5kfIb7mps?S1GU$z>c+6;ShW9*LGO^E0*NfFgn`U>mL~uk+F18WHSBN;)7)@az%S#mYe=yA4SQYia>{4 zcVVco5BImV3*#uHa~8=BcMImy-Qu})7Si>zsIK2FuuFG~?b5RgU&+F|zo5BOeSYVn z_wYSj-c;9jyxc-f$@x9p;(3Wr5u&~xpVZeQw_6x55k<^yF}y??l{pd~ z4JK<|_<@?}l}3N3721Y^D+>yKr%&LfOHuLlY*~xIf8k{_9aT%iR#aY`iL8*WZbh^e z7WCf8*lar6{Q)xSOy*?OY<)5wClcsWfw_!;AGghTQ+fK3ufdVGu+?to3|Vgm`qML! zk0kYvqPSbF8I*vh#VfhMg-o#{F1wk}7yMA3@7L>Cin`GGf^`z-tX zD(r2xwNFyah zEBa}$KU`l0H=O%DZ+g@G>3UmDb#U1Qp_X(#G+)@ylnt1moX~*2b^-a7VEvqf=N}v% zdCtM}Zw`+<%Mj>fw07wWNQ1MavLX1OsU(m|D`eG_TT< zT5d;6YGSLUC7m6ejqizAF$S1ul$LZtbcWWF{)3KQYe}uwYDo>HE-mSMrf{MqogJCa zn$*Sbfq9qFlDaG{JhHIKlLu~~C3V@FJ8S^AVwc(F&huT~W)824GNdIPXER7G>157* z-}KH!E-5YPqUbWEC7pqb2oca4s{#SkvGzc26Ybm7l1`7T<=azmDg#b?e`JVvn&qXI zbb4eZc_+lCk++jSl)UO1AwS?`*!0MU0ky_GEU;+j^G}1T@+Yo9=PeiUW1l!e?9%xB}b)3BbZmd6t zA6fnU^>(2rT2fvBH^QIlqy9-!yKOML8217=CnV64x);DX47IeRoSN|Ge`4e3fy3Q| zvFMv)f)FZ4cPEY}f}3N4u;Atxa_F05Ot8HGuJk*qv3fAs*#xTck3Al*_Tz@GFMxYM zv&jW;NB_`ub@|&Q7-bR4r|ISD7P!5c zuA&;Pr5y|7=`wn{jGZncr^~qMGHSYv8E!2-XgFeMGbLiU5;0tf7_LMNS0aWh z5yO>;mG<*BBS?HdR5`Lc3k_)6NZ!dT5M-}cYgtIxZlk1=X zsU=i>ZcM*NBg)e=GpYJKQ49+qW<2))U~-c8eRNzOq?b}<(5vV}XdQu7ij0IP~lBK0$X{o=wKf@*@3Qew!KhCt`O-uawoop~JS@MRZtFeY=)iQ}&9p)0t zNFC;u_#uwV&^TH;yfRbYX&Ko;OpMRxECh^(&JIEtPdkh)y$l#(R>GtWUE;g=3Te+ybIfe{E7~N7QReG4t~zO5Hjh-CLV)vVE=KO zGB0owU5YYB=RajbcpiBu?MjJFC_`8GRI#io@6o(O%KvBkQX_n;>io6b>zwA#<#tDP z!4__H9>%RcaE2F7;7;dWXvh$DEP0HJ5lDn6MWvgEEs!r69RZDr0_;FK5l9a5tC^qb zf(3HIyznTJR(d=S+Pu6>vES9^pIW@ZzU*|&z#%pG*2UKm+SawOS0P*UDrNZyndRV; zk9y5)Qx;Av)ZFdM@6P>_!5jo}1#rO{Mz*Wqii-0hP9{f4nW{ z{iw!0@_R@pb`E#guxOoGZd^ad)1obK1@jS_R3DEkRT!wRn#Kmz0_o}6ro~_~V#Uq1 z;doU%D*HhQr}3TrZZwhO;~mKBg;!1Wmv!U_|3jWInd`6SEnbwW-%PJ9)Rk$K4}%Up zv!Svo;>UGU$M2h{UPBb~qPX+}yJpeRnuTn6A*RM)+7!jAyCym~24^tTz}Xfw(mynj zX59xC1cdGb>uEBf^X2z71kt2%F@ZS=evwc}V_9b41gL~m*>|W(TNOPJHMTS++7Pu| zdPK(SxFKsz+Bn0dG-<}GHEG7HHEE}`e61$!XpqnPYS{r+)}6r?MgqOd58~6r)$FW z(oaFiC4^eEkW}6fsWdZEfpTkA{uSySuPDro z-?A1MU77nu-%>$VSEg!}EbYvuhb%0d_-bS;u_lI^&=MtWE1UN-c$Gy=x!|PB->KGO2>#^Y`U_{FH;hk zP`7GiYJGX+Z@u!zWB&oYSXF!s_u2B^iHB5 zMDkT;@E5;C6Zqw?klL?)@BcneE*jb%zb@E?HibhAG0Cp$bhzK&w%CwTsB`uS@XoQ$ z;S=Cm=h7J)EOqH)X2%xiR0=KjmS-!4mU~+Yvot+h3Qrd1(&n5jJdmvvI*@Ezr&6eG zYFtjG(74oyY^6}#+2C<%)@6@EzKn(>HLI_T=^QT~P0T&2)bKYoszwFU;phHc;`ffjc!Vu~VZA)1M@|_I0mAbYM&r<^xgb`RZQO zdLfKYY>~`u;R@?@?`YzErEH&=TufaN>%Z`^0q{k(0MOY0;IRI~Vf7cTjYa!qyM2Fg zC#5d$R5CJWgV1NYO@TkJxG-jqwEIOctTpvcM^zcva^W4H=q63ITk?IXhu%lV$;_O? z8_G9MKQrIBIo4^n@VeQCx2{Z!mAbH6h~LN*qV`wXBH7*&Im|C}I3nAOt@IaImA}`1 z2~K_zx8ytA!UupiREicTMcw@lxI_7GQD^>Boa(6DhVxAYP*AtFM=3vck91A{IGzh^ z_}!e*Uw78}NSD~BXmAlqKN#o=va@E;9f^v8xpBHK#ZQo(akjVSd#m!RrMu>6Lq7)@ zy1SEybi;*nAlM;7ldMh!K|b}GT3+S1!xqS~Okmd))XU8T=2I)!yU($U^YW%G#b zu^(fe-uh?s@&Eig>EnObHUiJa_(kbzug6lEHZ5gr@65Tv;?#BDYb!iFOc zY&!CAJu_IoD8H-_HWsP2&QB|Z>`}11t_&M>%$+jqsyp0#yL4vX^}D5T=`4)vXPI2T zTQryMme8eV7Zj&!gI~}=7}ZPN#XO(yC9XCPe;6-u3KX{}Ug8`mEQESu_7#_#aW8QV zTyB=VL=5Vf?95`xf1;t9l?1Am)ek93plUIc&r`JwywA*V)Y?H*EvIrGU+Yq^QB*B8 z@vC7~3x($g5sA8mQD8?|j;}RW2jH4xq-{+T9E=E##FMRj3B?qsUxFOn>G+z?Vem2S zli$mhQ&ce*xq&W5sq3&%f6ME{^>m+tom@emh~MT0kP=n!S3M!iTWsvP6f;x5?D4ft z{%)<9+3laiwzYTCKNVKYWEG2w8Ta^F5Ddl4f97LzMjv03XPM_Zk^xUIhew`s@QikN zmpdo9I` zdwk7AlYM+`iH=??W~|pLW(=h+#mo&;ION?PUt0>(rmQVKw^)3aB{;rD9t=8xV#Z}_ zZjYob^_NmH6XFg>8600TOd-Wgp%$>0cgN#v?Y%BMW;PpZ6<0Bnwr@Mf*IIip;0ojO zz}~yOrIyz@zIGF)qQJY@-$7ojmN6zHdXq$JZ=9P|O5tDQltrWZ_M0(diDxA8Z#}qL`_VNz0MKi<~6L1YxWV z7R3yftg|vK63^96%^5`Gq!l4hlnBY9_jxw$qn;2(jW4w7DLa>c)=wyU~;euwXK$23)&SZ&Sc!I#wtrV?4elNx+pP;7Ss3B?-8a z1YAi1t|S3hl28hqd-XsMT?XZ8z085@hqz^nJXqRDzI^+FQsFG(PHSr{(c!FDo4B0| z7gLinB{7oAnElCjsLAP*-bdxjrSuh^WgA;O#L?vZjmc8ppQFP&2`m3_HfApK@CU0p zYKP0xLa|`YLl&#aaad#_%6Qa@6l{Eum=M=HHaV@&Y3cRP%)=s9CG|5K{4^@!epu30 z716|R^*QfaM(T5B5iBD597~5+)HEMhM)oVc;={B)$Iy*F2YFj$S(TB;qXkzBurqtL z;FiGT@k!!_MXW2@O5@M8>xEqEote;*SoO|$&5G4Mzi}jP3Fsr@CL%|@W5PKe{!wFW z{3I(7)jPXv%4nnBd$9>rJ4qL{$A(lO{uo3jzC@cDaNQXW4&9J|E6p(?*hdc~vpr^IdR;|wCeBn3;U z_n97FOubKA99p9Q_9YLA+ac9ky2>4?U38@|%T zDuCRO#xVDV5Ul`u#=b)Z(9-C~Rsr-K8=@9*S^;FpS^@Ne;Zh19Oe~+J3A4(#k+7|NNj-T*D$Sqz$0_{l zs8+9!0IbCu;Yr~e<3yv6gT76?Aq5k(9&18kDHU5wvD1h|!Ep;aryz7oig-X6p1eiE zEhQchhNQYtOVuqS;sHU#1Eh`;4+w45L4k>m+G<%bURhSWO&>1XRy>|ss_~^FK)f=) zw09W@y~{*iAZ#jwcwiY_i3fyPkjod;V`U31B$PM2*B5(GFfCR>fr3ed(#!}21Q80% z`6!`)AVO(ogaU#HrI`^52qF}4D4~ELLTP4%0)hyo8BD#4E)Rr_MG#6eBNPxsD9wye zK$u@T5l8U6iApFSh)_UKLIFX9qIF|IwSOJw$X;jLG0Ian=q(ilwV5>uEgiQOn!9&M zlA3M>5@l}}M7KotVVA^)aJDzZ8_H!E%yshulQI5I*_7>9ID+G`$h3tBj-74i)DTVr zhotsOx85(UX26shgISjl+_p&V7f&pjPw&Q}cVz!|m_DD&`ULW};^VS?%-RGm+alv& z6O^RNy7N?icSsSTY=ERvhJ3gDlz4BHFRBN!nx#}dYC7Hmw4s7}1jgHWRUit#jpdsi zO$_0E*7EaC;CP+uUlrdIcl`sfwd(p$C2xfMZEzK^8-6@r)#0uy(IvI@csgteEFk8zK)fY3IooXWa6z_`Z$WZ%HfeLRdnQY3*gZ2Vn=}h2MYFhSGUu~N z=W)0si|ZOLl*uA>D&CiE>vT~eA;hD%D@mu0=)zN{vjR8w{; zn{=w|N_qH2%x&yXj5j+CeXC5>wsMLD3%ve$S--YVbe7gDjkzfrbG2;#SF^P?_2w5X zktT(9k*(9rw>l@4py_nTr=GK|39D&V(DD3&ZTJ_zK*usBGEFpU(`feSb#GZ@8+D!A zV7i$sdm~p#y&7qcshHP3HbRuKBXHOqgUfMmD|d?Lqo>k66ki#xm4%BrFM#rt<6lb@ zZXQp@v7>?`y?aa5O*N5j3dD&;)wGGh;xiuhR-m%8f+Kwu&AZ(U`YI&Nc|%L-s^D}k z>(8S{UjH)m`xyJm*3#B9dn^P>hlL2TIxMX*4i@EnGXKL;40qj~MLwM)nBc)|L-dAx zV0PN@va?pAP$#I)PzFuWX$QSEyz9_OlZ(AHyzHcHxtpqTH$}OF0y9)f+*FkqF``o@ zRmzAc&?(cKT}Wt#btRHsDqPsyRVG~6RZ`ehFzALax+`*?T7&b^#Znm-doy{yekSTR z(;nl`mvKvKMRP|Kdu1WAm!fDM5(VE{m+2yf4+#M`A@k$Ih&KnSX5o*I6aD=7&6Ow+ zqbrK$b&4V>D-->VDHbIR;4FhSRS}77AgIe3RB~28FO2@>oTS; z&yeOi1NbV*tLoC6j*_21|D5^2-=q2d{p_fkQgb>0KW71o!0}%_apYG|9P`x^M|<_O z3UfugxDms>X2(D;PuPIS_4}X9ft+6FnZ#fgB=(RS%HjSeE0Q>qRyNxkY1eIw7P!-`X+Uwm9VL^zV@o(vIqnP-TwA$0)ur=3V=W>&$H zv_t4uv6j8VbGxaylH%Kcb$`fa~QxRV3_X1*H=9)t}oL23)e)xw*Go=ZM1pDQMpPHDM*S7DaHT6;hIFGYBW*8%nKBa3wjv^f9xh`adzuUjWDu&Q98Vgc(NR@gKD;1di{a zm7XTvlJqtJg=N9%FmN|SF>v?UyhwyO&Lt*vJUHWkbBS@2vST^fkm|CW?1YCbC*PxE zww9AEftHg^HXPM}3D03USyTWmZIP)E-CuZEmJ(gkLtsH!#NvlJbOG-z$~0uS1Dj=dj)vo&@?9KWwj650`4 zrOwyc*qCe(;Ub>oV_a|~Dx5KhE#pqJMAZT}r*GoU$X3J%MY9n-_>Se*#(XWx1M z_b}lJa_C@Dnqs^7f@ECc2Mj}H)yg}eK>d% z*JUtA8`-W2!=n@R$>5FAL;7h@Y_ztiJjkD*K`9gb$xzut+cPB$O35nStH`UsLG(eQ zAQ*s?A2h%uM1xY~S?%+Lcz)*a$a4;!UpYMTtSYP%4?lMFFzN$aWg80#zCoPqG=)QEaEO66m7A#3!svn&D8*$75G0}V zzcAJByKDh=rHhZ#!q{UEpB8p`6%>Xo#xR9IDMxJv9Z<@rI5Qjj&AB}9V)SZM9(Kg` z5g^jq9}@zaoV0H{pp-4K-Q;cWj|lOewY&}}WqoWLc{}+-$g4pq0jC2>37-~@>3ZSi z5lT`MIgXROUZ3cAb;=tbCT9*ahYb;)z2@nJBJxmy$nGqn-Yf!8j2>oRHk0 z6o=tXpp>uK6bMS$mOPk**bgR8QJKx3A21ML_r zkAcdNpcF&bpp;)|wmLv5CfLi{styjnn}1b-QrZ;`RuGi!I43Bel(C8J>I5;Z+Y9Bx znGjv3Lzl_WWh!);2wkQDH`hLR zCy#danT~fmeUVmf+Z8S4_Rad@U35+t zPk?z_Z*~c8qHONXEX8eGU@1F~O**OTsA`K$w)1{~hP5$$j=+^+nb{6-#bs%(Sg=n- zmYlJ)R4mv>B#WxiNa(6fNJCaycmvb3p|(^X{UaOvB>K>IGm{95K{YjrTgXbjUBj{` z7+Y9PxEU}dmacmO{~m|2x!0z!H|JVlv~+l7rT?sD0g=;w2WzCJxB}QdR;S`>8 z9+?~|g5QgCnCwOrriO!*I!J9MwSEvMku~l8YHo?|^v}~d@AoG9WoW@nI&%f$g#=bJ zfpf{;JY94>)s?NjYZ~W2n|iCbm}`ntpX>?*lcLU6^Dm}WL0Sadw5Qz=rUlR|)4EA# zZhWCC#SE3mC2qxcP4{GcYAR0T4KX(?fgH5{Gb@!ws8k)j{L3NDx>+qt#HeL1|E8UD}mHPgiJ7v9}JWPEFanga*7@ zK1CyQrj*YoVSf2aO;}legoGpIoBu0NouKdn)q%+{tfM?Bd}G+&^Z_Ak;*BnttC2Z# zaVispEl^n~ZGaqZY=XmgA|AXlE!iyvj&3Ot4+xV|?-Q!?z7h`zA|4!USKx;gAxkxE+Uj>MkpYNP?{N`fFMF?W`qKQ2nEO-B@_@uDBw^+0YQX< zJs~9&5JV`@&ncmRAVR_ZkP-?AA`~1_S3&_{UFm#6b>=IffFMEvK?wx}5sHTDxP=5% zhizw(LL-OD52y}<{wq+OASDCU`GEc12i`h=~O5+22*SZ?o%{Elm_#Q*3o;QXn-jBrWS7%m!bptNbxn%r%`b5 zvMn+WHbF_MYzUz`Lm)+jvH_Ax8S>ro8{+L!Z({(}Y4vr}@%reR{j$2CI&WCMl~I3) z?7n)}{ayv;c_-$n=6Njajhp8i$u24L+#46So9AoL_nPOOMMI0t^Nr&6CHncxz;O21 zPW8*ea5mNn!`X-{T6023YGBqij0AzP`Lo$DoU?_u>xALlF6@}dg$nA3gSc5SugBs# zi*ztKBpXdLB(pM`v@#dwrgb*vrZsd{S<$~!JTRLyu=tZ~%*`hyt+O#VtxMNulh&7R z&JDxaT-q-iVABsP!>p{FFT0UVx>44lUYM&k3@2#B2W9DgFdxkpMvwj0vQqDt7$hxI z8Y*tiNUf5VxQZW!|5a)F*{^@ zI(EcL6bhYii!#9V=uS@z?_PAkW7;gTw4 zL=-3^z1fBQk}#a0u(@G48>BL9@RkyWvlMlkY0vbRiz~IFxg!dLNP;M^rg22UxAtb< zlfs9DfP;<{0*;Gv5Na0w_|23ku;oKhAVyad0BF@AiZ2Pn2}EIFI1{BsPt2c67|zsu zv;;P6H691wf4?+^+Cy-6DQ$NGuwHkDU^D=%Je`U_*-R~7Ekp5Y3gdMV2FYDZyK*R& z5gENjtr1x+aX=$LTR_clq{ElBc$GIBaL72DF-J3CW zd6`TbmX-8Xc~xCn9Wb0=tp637@2^&B7!HSf_&L(6nJve8^~6zLJ#mazPaNUZ(@x9- z@!|mt^O_xlygbzf!}%Y~fra4&X$lPI>2F{@^oCs2r+<7x7>08!(KC#?nUh=-CTvO_48w3{W!8jYIQ@(Eg<&{z03E9fhO@@z^>x-6 z4a1p|*d=}EpwtAZQmrz5zB~*ksK=)M2AxwZzDzAc!WDRuq&g|J127yg>~K0NA#muD z2hN}QD!XqX1btU4X|Jt{2LOhHIHu}8oGn%eY_oiojaCTk!{lKQnkz%tUSsifs%MuF zwpgKLckW*bhI1#uxG)sc(1QjZ$j9Y##pKc{E!Xb~&86p(og40o(51VQbm

(CLYSe%}_dH1PLGLa3L6urWojHXj5k!_Pcl8xke|AZg_lwgMg*A!uLwC=qF~ zGYAx&jy|}(2MDAFJpCZ9*oL9$H+nQ;_Aj)>MsadJzU&G#aiKBVlf!MDj+Zzc209&a ze~<$+h9Us)vdwjKM4j$nKL2|V)*n9nEJN+n?Ly;ZWSj7WfC@Lgu1h^Sd^3?XbJM4v z=m31d^b?WUxQQ|JvQXZ2TKx0jhJ&M`qFB8B&94=z{i~L$BD{DOKOdjDNvk3%b09nhvg_ zMouU8t{`a3h&wk@cNwDlJ0KlAUl-HPl6QCjd2Hr*1#1mOo9yP0^ct8^Z^wf;{)^21 zZi=G-(8I!9dZbdi)R|l9!GT5&lU-NEu{&v+A>!g~zSAvoaY0t%diEf85RLfLeFbyg z+rE^8Ju^Cs{ER0qQF8;f-mtnjIdJnge&fsn|1PK>!=|=gf%Pf9;UsTlXnnar^VlKm z9VBW@lL$f=6s&6<`Y-7}^j;C`5pHuYwXV4%1elqx^vh9)+B_Oe$&}Mrn+DEXJVmT6 z`?&OlV?&f%MEfa?(tdVpXuqU&#IX1-^U+=$-U-^faY=T>`oev*f2MWKS=v9JM0?~4 zoS~yoh*79YHwsU;t{K}a#?y3i0C!_PbMov|xdG>$z%Fz|k9AeYSH&WFOqOz0j$W0e zyf$?yr&usz|D;tRjF}5{b>XR!dlN8^i|E;u$<)uylIuCYef4D%xVo$CS=7FI@Qh=o zTPbr)qBl0>n)Ns5cJtMRS<6cSl?GKV;HQ?~uYJG=~PJy(=&GO%8VD->&kC8GrOW^GoKOo zQXU0a_a<}Q+&WgO@8oP`c%GtL^$ zcN1`>?6-KWdg7|g>d44rAjF>#+5Bo|MDsGuVzDMyWo}(R!IRc-nn65&!KP9T>zURY zxLr`61Ju?0-7doU!6s3!5AV#+$4R%a#JijOW?-Re2lh$k%yzt{yrC&(L|voCKcj(p6Q!&@iA0DMw`%+JGNw? zUKggQ_#*EZXkJZ?EJ}M<9t)-c4sJK;M2^PsN)KUuwa2N!m}@BAaQou}JV=Vie(}=l zEdGG@yaov5I6ubKf7ZpHYhIH%(Dt-)J9B4%a!f1lnh3Df+Vf{My7qgHD}!rtERz?7 z+bQR5aT#UNAb%z4>RTenTfB-|1?)~>;}V*>Jn}F_3fg8EVN2lRt?Kn&z5t7CzJQt! zp3;WgRw{9V+Z$^bdE)Sm^UNmq|ZLD}peG}@Tb0vWq`8a>KJ z#Ox#Anm^}T#r8-ZD{6+svAv5kA_jFRp5FFgj+3$j1928>v(C znPUCECS{{lh2I)mkE-|JZZBemNX1{s1qQq5jCqbSnmTk^v>>yk_oAe;_w=jc|2*`X z=qAV@)fV8;WW@bL_1Nx(3f6aa#w8J_R9gI}IQeSe;zmfpmc1jkK@Iw)j%E^YzIYTi z$I!Wv(%IdH&aqPZfH!1D*4xtMvg$0$jL!fm6L!D?c=_n%37Qw+cmtLn!vB=e+h4gN zToXK2^!8_*aE&VNPc+O0b0hvMnf#S&mPswHHmRtGN){U0c+~;tYX)87NCtBB%mG!GVzS!!|1eup66Xf$WnINKA8`Opn zbYuQ|lk2&fyDIsz;liu>S;MLn5URO9MyTmD_s3e-Q@j4ZjGpRYmA=UQyf%SaPf(am zSh?O;s&z7VPEFR_A8ixlje=zJnmdG(w1>IJbfg1KRv7!R%*t_yb027yXXc0VWtUDeHyR#@$ZehQ}TVs482gq51?25}h))T9+w)|G;t zM55w)mD38V>(s{XY3f^0`FgkVn&ir9CEFctWlgF|9;hZ%AuFurA-}0HVRg1JQLUUA zM$^x|Z?LvaEU`{AslXDO{H~{k)3J!9u*4^6Tu&;jP}?W0{*zoUSy(-hRQ2QZRW(8B zNmdmRm*Qr4xOF|X!s-?Dw1Kdi(R$Ntz$S^aRsDA$&>YKOq;xnigot$nBJg^-FiK=%>QUkd1A544u963~m&fL=f8HZZz&F5L%N_br*8)j56)2xPD21Z68 z|6)A6fCs*2(C|rly>eolPIHL1JW?V3lf%9^G?1;G_wJFWjV*@k*0%p6w zoRg*jeZN&2n1coqEojDK(u31XJToe}}}a}MMKnOil!$_GSX>(#n(d*;B9nLpgg}owYz$s#NaobM1u#CSBCBGxo43%}TvCmk zmc#S0nSZEU#BnT1(9>MqSat>dd3Y1r2|tH=(Otq=iWS&oIwEu zMO1SirZol>SZi7|gylvB-P7EbCR3sbsgFiXmwITj{ab?_YvGn=7& zCFL|Ca{%r__~55YPo`mUmE$-cHj(xopChoFwaG z^z_V!q&tdlkxD-((?T*=oR_iw^)~*b-!OdM0sF zmRw&d&io`VI9XHHg5w?M3b65bPLafd(A_-tS_ZXSvu)m_dQkI$miWezW7UGwQXKOF zgd%<8FY+8PJ7KJEoUShrU<-ZYKT_W~*!h`?fSLUk&b;bq9wk0R6~&9SI3C8@X6Evf z++Ty7n_kNR3C#R?*!Req@Q~ut0qH=hhn(L0AId|X4ez^kj^74ca-74hbDUkOr$<}* zR%cJ8qGL0l2UDfW_%DkAg1Jghf4wNB3IP8VG3+@Jg)D^L~^ zfQZBCwgd;fonbGhmCP#~CyI7}scM^Ru7;uDrayfnzK29#UCvECQI;JQO*CY_V@D~R z7;a&1uxmGZ=cn{EU!{O;#+_^-Po|3JLT-PO{xnwNe7VQ`JIfQ*}DSLl|oCCtZrI7X)C1G?s|qU?FT5cp%zqQ z6V;^GX3-Ysx6kv?6McE35C%fE-iM%{E{ZIvDA+1pw)&m-l=0g|tI0z~B?*#}Vi%9U444~ate#1!7L9!5{AJ~b)(i*RnAYOF1rNu>UVf)Cmi>hq0 zptmi;Qye!-cQI6P#IeLpV5W^{RxhaN=cAbP{l}#GGItndt!0nMa$4b5A^1n&G%RDD z0*xxPYi$q81k_isvJlEZtVw&|ma+#+gK2uO3KbI*(Ym>SET^Unx!OxQtg@z?M+KWV zLq&~EM6ViAVo$b#jjcX_kF7p{8G-WYq6+vEt2`pUBDw^urWp*(yLnTIQ6{5JG1Bez zSF(f8v_qeYjA}!HqFQv?psX_Q{t| znFhn;R@fkLo-|_7z=5Dis#q)z7i6DUt%<^W_#``gBymghw6KU{`I#uxU+(pz0;JwP z0R*?ZTY)4;yI2uML4-|_=56D#@+u@B7;|lALNe8(n-okcdlt46jSm>dnS~F8b&&m1 zEgy7nXG+{g{Z1yeSBHxHQzqNIDPzL8o14tRnWAyRI^oULkp6Va{PQY0Wf0WC(mimX z(^a>8rg&5tpeo}&w_wlC;<`QvS*CO=8}k@^9tpn4dlc)~HW`9iLpjynyml21i^?`% zjl~IEXzvy{DX2F=W9W+ZY`7_9i)j<>&BfjvUwdqB0#+kr!~_FV5ryQtyc)d?!PKL% z-*cGAZXb%*XrqXog%CTa>TU&#)Yv<@&F$jg_z*dMd`p&u7+Z}86#!WK>|T}y-fqT5nztcm$2&yxJD(0gnkMyefKt zwZWYMGEKfdQ!kVd!u?A~?hzoq$GMrxZP45{f%5uakfdG#n_nV_e5R~%6w429#Cc_-7QPI&VEN3pgGlT?67z?W(FAuE%Fnb)oHlmt^g-Y$tr9tM|ey^@2upq(=1 zD_6?+e=`nD34*`vF5%Y~BGOq0jfj*Hpv-K@TBX-oOr+)Wm%(xVDIujrj+* z0EtTwx5NrFeKUO`Za#N+_4JqFU4uAiVq!2FFQ4G^C)?-MVtv#b>dj485ue?Lv%%dh zNP(32t?;hDvOWQBPrGWEXq-M=ASuEvv>UMkWt$Z;aWJdmiE_5G2YK_pIj6|KG|B&EN^%PtFm;#0 zJbRQaPFXv{Sk+aPl;Rk69oJgtX9E0tNKRv(!q$0xei^6ALAeaXXIwn>7rM+_e=V0W*Q1)y zjpEj8{SwT0FhT12lu(2H>l2eh0%oH~rG+8pzPUOLxUS=J2xLT~E*g9CK#N<7G;dE48A0ss=(MqJrFGbA$9fn|P zsWI1ZVP&tlOK@{$d@a8Bc%>j>H!FWAoxB?g;tX4|Qx=fh8%NU*R8dx?n#@Tr$}^Ni zJo&rSHv*o*Ig0aPXG5Z1D7pmC~=}7`#DfW`pbMio~bO zek8|yD&4FO6$xS83K9EuuY7)e3JJvw4B}JfJzXDCjw5Q&GA|SI*1F@P%G4eKbF)xa zOFounZwz7a@{Nt3j53?db`r6{5|!*XK16un82XMcu?c3IWSRu2JL*4F8=)L}&$6Eh zE6s~oV61aJP8Y_3tYIG29k2AsYE^j z)Jnwu$h9JCe>@Q zZkL%(F1=u3b&U0v9>krK@t0m&pMz?ZWCSGqUd=eDjuc2{5po37NrIGO8G`;!&ad^? zacGy;_hIHe&BPbyt9n%KWA) zD11ehrzXysY(4ImS;h4;i7Q==c$?qyZq)BmZ&}N1zM@_z${~Id2YI+G04;%|{JkhG zaJG0RMnmRW&H&t@X2p78u24QKK;>Jr@=4@%^ZHGB7B*%(k7NG3?M%y*cA${r1?=kr zth4eG>#}mO%fl<4oP?yJL(TGa+78Sz^TLzD#mm;EdTU{#6epTE$!j4c_XhD>!S9n;6XI7;E`9H~ zYXaA6+OFKe>X_-`iu!K~D7G0RY7joDi?nZTcSdno%{2n!OJ{4+(hL?gyRS??RZkRl zhB(wn(yU2x^1=V*uKf8{k=-UL|AT;_`uCf%>_5n5 zp8}i0J6TO{L^@mbUoqEQ4f=Upzk;iKyUn{62X@t<)*F!!&FA6;kxz5JYaWxJv2#_SJ;2XV7C#x zy~lXKcu0t~IUbV4*w#(v^^;qbDQ`J`9<6^@e7ckQgj7xE6N$fRx`Jvt)wI_CwMO`qFD8~Ux0oxzUI|rt&Yq;D3}0;!fEZ&jz1^Us8!7*2qS!Q)g11`S1W}-#Qh$VC z@_wTJodK6ui9NK`FjV=0QtQ811ha5g9Kj|ph4Q{Pil>Vk*TY(Ru5co8nA;Cve{TmT=<|ny{_XYznaN+mgBQ-r zkL+sA)ItY zyDY+@o39e0VVAbNcj6hOwyyI)-&iOe}v-l?@rEL zQx9@6^$f(2aW?f@D;TatE$iuWM?74uLyk8FbT#Hb@aStV%uGaIvf%(KB7!SJ?7;Hz zU?X{A5NS_4AL3I7(^LAb*S{(`NNrxjQ5v}9oUc{+J4ybiu^i7HVFB~zxU2gk)g--<0E z?CRlv)G0rOoYxtMyy*kj|78`N&y;eR=2lVdKFyG{>RIye3B1;sI94<+G+4}ix??ad?Ds-#Ea2hIIgk!KnqLRw~As?4}5llmsYR`7&jDaClM zk_i1LM&k)yk?>EL@~si^fmRxdjwNUXqTxkh`6V99qiB|}{1ULdymwh%<53@HD9fX@ z0L4;(uW@>`F>%jx*z7bV;c*|IM4-^UMOOw=WXnG4{|VW$B*l_zOtz4bUD>is?YLyw zvdxMXt7Vi4!zv$a{(gcxeR+GMPTl1I!v5K*TW5pcpQ+-gU-P}tWRG@h<77q!y?MO} z&NftOWN6Y#c2w7C{vH-al@51JthZyBW?>-s8h426b!K=lb^!*6{mi6#$vWP*Hz}<+ z2lWDG@^v6LQw%%s5!A(L)l&N_t&NT~ych~D-mCE)-t{zllg&B*-mkO7{72=tb!zoA zpCwmjcC4KDfWKa4+?0ZT05;-iD>S3Ay?O5HV7|SZWNIrycU{cq5F9mDEWIIP*T{Ud z!;vhMh{H2jXfXrp5x~V&wBACCqB~`weFh7yymx1d2)eb63qBn)+mIbIHndn9S{tVR zE0cdQHV6Uq+Avq8_n-!-56%|R1r{_5f_lCz`7jukGwmrnf?M$qj`mfSkSk-s3RR$; zFsLqK3zb3jx?N_W7(`E}f7%;p6n0Cno$eDSqviO!(*3tKGEKhMFwuCNq>OyRUE|Owp{DN@HzBGbx34jPM z3H5NJu!^PYCRy1=W()IOFzyPX@PHIa^eL1UnHJDllu?-#=6z=8LW9pfX%|-}(~JcX zCrHNlG7yeqCw@*&SNYfJlj|59;KC4X$aI$+SKZ20#N8#`xk)0-TX%6ePk5%&`68Hp zw;+2YpC|bkrjT_6GL(Ipq5E{V@2}5sa?Zx%5E^d0B6NtHgCxIjZ5*1#fd;NRTqgzy zBTr6fwsQpjULf#l-P^U;Rj6aQd970yxVD_1^6(gOapjmDa*K?200Hk- zHi-KtqzsAXvpC7suMmpquCb7?O*KEl)<`f`uT!6Br-UBco|c6% znH~fcGXH>T?CbXc+wXd>-%A_o_g35G>yx{Dv)kp5wM*xF8133Gj9>=3L(wQo)fT1O z6eV2J*%`egp|7c$NEYjCzErIK>|wRNO<1}70rj(4tXx9f>k`VtYF~UJb@R?<%6BsS zw|Q8-vR_ys13;NFt65Ub^^*#6;CAl@7Y1TELn6Wcog+07c=v?GBhKFvY!CAXe0LVQ zppoFi&+)VMkIWlBwsx<9X=a+H=kQwP@U5JB4|3NXxF9Hge#}@FNIVwr^m* z*q)>42S>&~0$e~Qzl4i=R2*8yf~ZlASS=<8NWrL0XqY}D@*l|68@gGIZOK24fR9B}5PRho5 z1v%ImV&B}oHUk?!lDZ0~P0P9p`IOq%{rOf_oR*LnHk0bQOF5IpQnphx$d!r4fVjtp z=wcml=965aJqNKJ9OHYR%h13fIXQ3QU8tWlFt4!*dg!)8lF+bYL zkujC-pJ2xf$eG?5S;34eGUPw=*-q+D-E*AYAp`rZqsbb8iCMu%!lpnfVSDaMqjb1R7^e2>cL10=m8@0p%w_#qxGgJmndyL?k-8OnR!(R@3_+k{ zLzPapY)a&{QMj`nA7+Ox&FwB5zPg0&MLnt5J9LH9sXI3(A->*1UjIzrS}u>^9^!inHis{I}0)cO_hUa%c=ATEmm7}_p4eXWN* z_?_!Wrd298DzP@*t_O*3XKD%oUMbTz^L@_6f*voyK~vX5>}P ztimxX!fJW=&-rc0)J^OGj>E4`PVPYGx4+1Da*x0t{L55^GZNbrLO4vrHWNfgkW~&X ztfzTLcK0X3jAU0XDCJTFsCUl`fRui4y_j)&(bUMjkH4 zxGN%91wx&`+y`SvI!#vTAt}V34#DR&`V&Q2$LY@#_=;1kH*ccbiaNan%cs{;JT;0X zd(!|dNVt_xLu!E^#{SZcfI<_4Sr>s=I4G|u&lv&=iMe^W8H5I4RSpT6<8aWdxv)l) zA4#d1&S9h+FKHejKap!-Nf}^mv~*FeXSQQ3FG6|r! z*p~d4oVDAV|ymiq!>UO8=N$6zQ?7C|Lt>%vAmYvwmepH1NestFaQVcku zG!9wI^VWzD1%MMeM{l*o57f>z@5ln@9-DDIIDZyXRJ>6bK*=iJUkmiTUE)%PyZP3? z$wu}Z^YJdMNS%MBzg&pw+AA`CB zoufj~g_dcaz|uN_2gw}r zYv)JDU{S?M$~mTzgFFz&D}=hk(jCuFAIrgFlH+tM!|zHgpWUV7W2pn+dKrW&!phcf zqGzq0qmH?T$mE6366Tr<1ZhFsLpHgBEOS6!wMe?IkTI2zDP6F#9t=8}3Ld?Oz*<*R zkh7KQW>=>m$UNL|*~jreKE^*e|O)pn>f>a=eA*%=7;MF0iD- zFFVd3!A?0&M;zY4Zy#DUjfGc>^%)X3ael&?{U%a8xMUIV{}AIqDeaF#KB@aSpr8-y_P) z+_3H>S~(%u$HjR~JMkx(FDHyilAT zJj23TE-=5wmaHd&J)AS((_~5soBPc;pc^JY>q$&CAnL|h^k|$TLT1`RAdUL%FzD+=KvIVSGT?+~ArA54P_w3ff;bQ_Ui0(VcP?ozp;Qg=o?gl>62BR0E|h(>xfu|U>Q`y0_={nLYxIZBysi0O@uiqgXP)}^Ahhx2Rk4!W-1dYBbD9*?xJM__3V(9Hq` zHW#`Qj)vmFw(%{HRs#6Z!lCT}(yv#2I{X1Y@cxVzVewYh$ z^JqVI#m{Ufw-0K*=Y0W33~r*QWeX72nROu9h5G0a$FbVz`ljt#K=3R^)q`qb!dgXW z%Y75_#Ig;T1w0Aw#LzfkBmdE%1I0A!56+1O=K*!x06-OtPSRt+6!e4W0l?1O{v?K; zBipTn)&$kl z?;_6eoIN2Lj#wS|FYV`Ex}z^U#I4}s0fCF6lZ=k@GwiKL;QVKJa}1KoNV|JbGSK-c zOK{I1ED^?ya|fU+m(rP$kJlirIesifz_)q={r5s-$ zD+rlN5o&4*9~c;7odnS9Bl+UXdb5B!ZI1Z_M?#XvTwPtPT&RCg*f%VJ*=4{D0dPb1 zL*Nsff{$%L71L+>GdvuaGo(Gq7O^|}2ur2Zfn=Ty0I=H*kbaBd4zBB&#m zWrBZYe8V-UgMBTy(OY;{Rw`BBDNl6N@Nvkje+7}GtS&iDKiGoD!qPG01~~n$lD}vw zc(S-wKx7;6CqzA_0*MLcOuRrlFCbXYsUgk42g+5P?TC9<=|xwib1=(m8t7~Wp3Dwr zM=u}*8>y?A3#YcsMA#sO{Kli<^#7;pfhgM?uaIUVwN4JmQ@4Rn4YrQ4(yBn5^E zp18LlCcp~W=05niz;k9ed=_1WBln2}LA=R~1~_Xl%5+p~YC1&&ti@0)KNQZTltVL@ zTJT!hg{5pAm&Ve`7gIxw-kT~Kbk;E2$>+r5RyE~>6cVo81{T*NqIC$o+|c_&mU zRcFs;)fRckRNnplZBO1kJlo2Yk^M?u-=!py5+y&nl#`555V;}|K z1%F*wkScT#a~#aatp$?65^G=@lApcT4K2t2w_h_pB+k1Ud&E~vJizWmB};Zv9zU9Y zFa>@tL=%xA9Q%LkwP!Qc=vj?Gjc!;Mb2&IlF&B?KUZ3K7?VG$Ovld>vW*!Ih|K@A2 zW7X=62WlG9G0QN2fE`kMOg;G-zC$zR4OxJ|+B%cu@QY ztty#!KZN;=bu@cGyKJ*(6S`^O=q7cra&py-fgE_hZ@$d?fYXlS8*zGYJmnn9L!Q-# zA?>ntH8ShhO_1bH*oCZRB^nn-6MA1(VuQ1iw2kl)(w}XhbgQV74Or$r;06@&^A6{#U%Nf;N`xWFF`IY$^T?g}d0wCpbq+->ZZM z0Amiop+|Ido6yO!)EIjRa3%s9F{sJ<4*C_pfSMFKKKw^nw7|hnaexEiD0s&e?e}qW z9!5$O35F&wlPRk+-P;*YejuA4m{_EsaL~a4C&D4-iaP!MXHlYC9}Rt{>YldIe)wFX;^+^^L=quG@1XUvNF5$o9w<1Wy;mrc&$1d-L~m(mi4*LNe7%NcdnxLE8DiZ@w9D{ zOEOQO_*)^k4SsOySDp?@+D?VKwH@q!CLF%GWIjx~uvz=^1j>jb&EiE+n12z9$%KCN zT+|`cOR0s0~$PIyv-@k>YE>{9aM_u6@ zZLVMfZ3W29aoUau0srDs2mF;Grs8Hh@$KQm^c)sn1Zpv#gShrw7;NS$11mtF@l7i$^5w*uvIDMBm$4zmLJe}=2 zePPQVSB{^@=iqlI=afq!&$6HbnXxdMOoy1$*ObLj)_#EVv$6VMLY43_ckwmfI-GQd z2F-Tz37t7+zOLC|ku!xw7#8j$vmEmBEc^(fpgZImq-;<8l$<#%6vu_Ga$o}iidv;x zUgC^R)=-j{#nhF|$~z_M0t+B#i!&^N7W2sx?Ie!g*E9qfyK1%efQ9O=D zjiX2_)Y#y*@=EJk@m4Cpc;1Eaf*(fntuzN?h_Jq_J!oa6+sccHR*+4DzR1#t8tKMX zW56#o%V4Q`7o+;Oledrn(1UIs>mo3Z1|_V;oj=Ei*Sr_`xah+(Ef%xL#1M|BuX#VEXG=D zbi#RXV;(jH(>fEbwS*CfJoO=L5EeCi{3rZISioL3>sgXJZTgs2x=<^PT3ZLg)`P1k>@^b)m_`6BHeO>nC)Shtz6uIh(^Xt6sn{-!rk8;MRvZ~gOeQ{ zvmg+GAtS8t5Y!EmGkf-IQGA)1C+0C;W`?%G$$M_V>VwsyifmfhI>8oUm>bt;EnEg( zqBPBBXGj;=VBt$8x|<801MWyFyJDx4sgdl@#I4sl0V?wfmj=??m+8OSH{S-JBYOU; zGC(m9!C+@viM_k+4boTX-IJShhWXd7?K{JZ$O7@q_nkHbs+Fj4+aQ_U@c&L5Fg}uqh0JZl zIJqq`IV?gKG-zu_+uOQR+Jc#P9NR8)vg{dtWzH!Wk}P}ac2DzWE1Q5jPdjrL8$cKp z{ow$U)G?;Wc!X>rwVS5E%2uKmr{SOoK9x!Vd$vz11)gtZ6CMQ?CsW{{P$i@aM4Fg- z5LEVbKE{vI$v=^Gpd3Y_da^@U42v$8yM4z=9Jtq> zuX*ksro(K@*dua2D+4H7QrA^}XE~S#ms`IU*jkG_66i9AgbM7{_z5PeDed}qYVUTHX z)C#;V$e48b&(C#L?y8%_i(YAh7l$a1A$E(SrMqAufmLi3?D;8&2U$IkTf(XPX;FC-U#3XU*nKqu7JU)#~bYFHf zj~mzG*>n}R*Au@(&D}UqMua6$6e-CoAODX?$!)kzH$_S|y2K6;!B*$x1u}}@s@O#d zr4Pm`o-!RZdTMpiCXwELhm?PSdurVBmW5eEqs3LwLh z%LxbYR9P3DX3MJ9Ne?oo)eP@nBFXmH!87Z53CN3%Z2t3{+#1Kj@_L%rQoy5e4a6rO zh?m&rU|~N1*hpG{)b|wOW@z$g3QcxnElVQF79q(zlH`v{5|)VhA|#tDe3u`DFG?Oi${pSuLgr6Wz&AUSZNILT zekF})@E4t(m(?YpofFryM@g(_Gk<|dF9wKVA65B#n&r2Ww%#5MiQzTKSc}tLmY5HW z*XVrsXA1hQm=Cw=$WSlwwDRVU3k2aE^PEO z!e%}s7$F@M>)MXOGDTrU@-Xi7Bk+Fn2rOtj0`-c(%47sS@FVb1^9Vf9b_8BaHwede zb{6_kSkxE_iPhz{wxjTlppYyNfWcxv26fG2aBbT$(8Ztu29NqNsBIpD?_257r!r|} z;@9bE&{_=kv>k(KoZ;pWA0uK6Y&cD2a((j@_@M3W-;~Vk>ld5x#y-!-D~V^ajZG+*2lIH!7poIr zAcH^g#VYTMr6_(&XtffMmZDsr%qqMPo?;7iC|3qsjpDP3Dyu(%VtFtdQ2ZOW2alsz z9?T{bpUPrWkFrC|<#qP4n`P6V$xCeXKE#w_Pl!BqvhTzaH6;iLm2>U zx{Wyp;v`_+{uAP8e;>zWKb%Pv3IsdgRGMgX%=mH9koHcTPapCW>jG`dg5srWrgJxqhit6c%V>HFuD-c z&j)sW$DdtMGAveHS^_kS`58<5j~-K67Q2vj`(9o+Y~6j#iL?i zs4*2Wm!U>Ri^~%q$zWn!`xXqlym0uLT0K#9SO$^k4M?mwI93Key0Bnqzmizlc(0*i z?^lWUYglPXtawC4X+?Ropk#P-cyU?bFt@Ae261%Z=+d(B9LK~M4l9igD;-`KEf`)f zCRSYO@&G9{bbPF^d~CrO8Rx#g?{k6IFqk{$ubDJmVuhndp(gt>Oc|mG;|9)(R@kwN z4!gXdETgzQsw|c}M<#dyOzymT9&Mh5YTvY6hMP+nM2AYZv zDlI7lECyN9a?(D+Yu*>_G4ECWtGCKD1!V-_?E2FGF1~^xu*>U!FVurBo zjG`#PmJa<(MnU=bl3~#ig(cCVVsH^AW|{pYLF4jK#lt|?axz-9I9511Ds;f-GD_!< z?<2G2titkP?#Cmel^8~HWEn({g$P+vII74#lte3{{Rf|S+G!{M5)|PaCuaURMf$}? zgDTP+KKVxn9}O-n8GeDtAzP<1TI&6}yr8lWva8VjeqycIwm?CQ{IWi_z<_VIKV=xXQO5MqZX+4Z0zpQw8VL7^c zaY5O6c9<IE9GD%i#V4oozj@uqYE*2h-OJ?ELvVMhAV?x z5xg5MDlHpbfHyJ)D#}Rn=-_@AMj<`>4!RIeicj={;$fHfEge0k097crr^N>@f*5{{8kwQ^pVl*{k= z*2Lbwe_@!HnDx;My7O{e%2}tAIwmFwd$ny}lqht}v zs4OdV-zMQRw5+sX_^^WVScYH;#?xhaXhC^lv=ZP)floYnQyvvrkto2p5A!M{0jA_E z7=|U?RvwO3Hletj1SU&}k1dVMttVXJ7j2`9bBV}dLOA5+L zQaGh>H2Mc9zhnfV%!&ZjCRBche9f`RMe&lQzBa2IU*)SQRjN%fkqF8{U!$v_0xlN7rjbQzWL~So%SAR=@ie&buN7STIF|==mBM-k8AACbQ>f42zWw_r zK_JJFcP&6ZmKBaD#zH|s@Vox!$kG}ed|{sp{VV}>)UPUxB&t+DGRpr7t$EC-0^k5$ zvalcqDABX}iLwXGqGJk%jT{Zm^RNfsQ~|XUdOj9}7?w6waxIFS zH@$nEcEYK>PCMzBwoDs}V*QTE`X2>!>i5C`G%jqtb51%5b8cJ=i;gX!)F`G(JIq_j zLCY~^SW$KO6JxI90$l*}Yfvdz6e?cE*y7=_%K@vhAUX=86pa-?Ssq$ZRD>x{xEa8w zj7?fSiM$D7l|x0NYywpv;-JAp&9ep*6-)#Qo@ML>p<-U7EG8_0mDNn<+{v>S%G?8@A8PHV7=DtRzGP%n~ahE9J` zw?xEb0MwZA!u7+25!|01t{i&4YM@+W#l5_sq@+-V8^_mvBkU&&GpW=!S$5hw=kz`S zWG07WwyA=oM7@$epnvf!fw z1z6L4%mA6!>*R}RDGZ0gp(lh5rFJ8ggCg&_SL7p;WI2aoM2WN zgs>jm|58_6$W*O}q1jWSL*04bprar=RAH;z$k#;`P$$Hc_H>-VR?SSNYDN*njA}-l zDq<2OMy+CKX;Bf#KvgSIO3fXUB%u?H8QTb1PS&}8DtamQRj&k5IJfX!VwFyj>!>Qa zsM^!N@7L%2!RKAzF4Y)^MnCkv!^ADED1$78j?3l7>j39~_&Y$dzGu5G2J%^kPZP=D zH_&eFXZ{w2yVT$Yk}hD1f1QRXgB&TKy~l3qy5QPweqENbrEft=w6tW@_~C7?ZhMXyhA7%ihU43Rb?7;RR*GeOd}!7(<7N+BNvX3;GZGUB>V+Sh{Gf zQ^-SHX29Q6fTakQ8Vw^COA@KM9zm6Wj!T;{+Q0m)gqRi5|D}Q&CsZmKENe0MrE!8L z{N@{06^O{Og#{zIJh<&!v6La|Qn`>b1FLWaXv-O<@*fgqbSW0GQc)J%^_V;r<&x&= zaw^2ngeBPTuTUji)thLNFCg`4{dz6iHAELDWdI75p@mdj#E=$)%&TwZ?;xN>k)p~9 z^%)qL?jm(T0h};>%0>u{t@|%yv^3A&V{%wus>GR70Up(7I$xR0<0; z>M5opqi4Aug(%!?>Q%7r!x-#KngJGnwh}!R{vNS%PLfAy8Per)E)S4@PYX5GKP)!X%xwpYRVdT3L)7hVI@%WA3fSyMlg?{8J85oRxJV-h~nzjg>#1j zf-ZfJ6jZfSmma?+2j=oSN*hyqRVc`;;6IqjaPh#O?qOL7!-B5$LP&O*Cq0IjR$v{X zZ1LGjz&P6Lv{S{$+Y5A32ST60FqUL(NKmdX)KRQcYTtVklb)t%uM@rQ!8Zy=$ha35mK7I`S9kPL0Ul*9P1Z|x|+lIa#Mj{6PUezWx6@ZP^2tw9#(>GdGs8SWzl~BA8TI%SXWi9dxo8zlcbeNkeOb} zC=}>K%cPV}MA9iqLs8(ErfD16CLw8Bsvsbfs9-A!2x9Au0s?{xas^aS5EZT$a8`T@ ziXv3s^>Urx_x;1#YoC)8eD77s*=y}JuYdjPpEsZeeVW8k;9B>&uSbE6GLhldbzr|B zOo)3ctOg2Q(YLA(=o3{kIyjPAbj)p=XA1!mRKRF7?5i74hnk4wT&PNUtM5~PjcjMl z*ldg3SR#uNh7nEVmQgQOr;MT9AP=eCI9ahkI8WUxhXR2uDp0`h%PnqoVl=6@yNSt% zAsvKjKzkR7Z>{hq>=uS(8!8m9GQdDaJ!?P$WFsBkltYY57q%^$ecIePHjr4xnW-9d zVypVr;?R=;hD;n{0Nj6*^~Xt20;3=|yJEG)c^ykC~kTAGi7b|)0 zAb@+!JH<$pnZkRJp$kk|#D|f|S+mgzP(mb$7e_ZbC8OZ^(g-s!~Xxoq)@rFhr^k zgvF}r0LD&@qjfdrvW-IYJNM>d6$sa<sY4%vTE(Xa*T|LK35|_9Y7I% zERV&JntNVv&j?88Swj2;ZYG@k7#z4Boo0?P^)aHno2EW1PIZ+cBipTcAWLNW@ALW zv`wCg)ij_(OZ_XThUVmidbi=f8KO~aFU2kyH8E>=Y3IC|wr=baBqHn-2)p1tbinr3 zQTV7@5lB9%`HJ{)#pFF8>{mg^2wX?;-9l`-H3#yV^wwZuPV4;E&W`G-bC=m0$Odu8 zSR&d&5yXK+RrNL3gl*0P1{_{p0D~lS`M~m+tisacrpVzfG$_JlqGWPb=!Z?M>+2sG z#quJ#~Y*%*ZgEY_-RzLWNsu2}QXo zlN19Fl1jEDz7de@$g6fETt1y^e!K93ZI|>m6mTFlh}!Z?vANJ!I(g|7`qS1t#*-> z)RUmotRqnz!*MhsSO6Q|zY2l{xeNwDa|-Y-RIOBN|6=L}ptZAw;iyJca4C|5!=Zpfa0)w*}9hGcNCb7?%-sn_R`(J;b>f3Cw*ohJp8H50T+1!C{y8BlJ zR!>3Rg#>K?eu_z;oQni7SbP$DCV0ha0|%;23+MqO^U2?UhQ-ykDJTH_falgz&kd3H zDjY7}59>vA8HPuMQ(X>{eGMgmBozAAiNF~PE;4742~x)Cf~3$P?7f0;1NI(b$Y+N_ z*MIS*a8ImXG}MN3d-@Rms8JKwjmH;g*9ODAgf@(Z8zLxZTeNV#nJt1ZrO*vH!l{D{ zG)(M_yD(!mq89bEV)S#se;NWZkpj*DO((6e83+J7@|G$LL}wrNH$F(-A7s0%Qrk46 z`wZU=PmV7M+`5<^>BduPj0shRK>SJZGpsvQmM_Mx0h{Yijsd0E4l&k>M7(Xsj-_W6 zT8gNHG%IXUu}yXX8khllim*+VS#1?DLmr}z?v*&|xT}VHb5|O7D?TrZpWo+Umw41iwIf;l%Se$ z3d*;R_KMI;3>8*_qRZ)3BDwO09T}i<7U8ak4t_zv#2umoSph)Kp&V9_%eZr3U_p03 z49_Uj*Jj);hN z-VoN%K;4iT%>2Z%q_=w=$rYkMTdJ@s;ph%xuyPhv$I7v1=uULVJ!=Odxi!R9x!Wl= zx&()TU4s#6|G6W5k(n%&Iur&jUD!H%(VV$q+w5-b^Yi6`9~zGmfylyzk;m}I(+|{1 zaf+=Pq+2v_B;C%cR*N%JPEqZy3Tt~e^imKg$0@gJQZ#2UM;@BW@0ec;Lst7&M}69o zsk+uxJ1F3Y5F#e(`X*%~?QCQmHlD~` z{#YSi2O?J(-8fuSXWAUPtQwLI*P%{?OH^+HmKz0uffs6_H(F1$C^v4luC_9HsaK6I zWJ-ka2q|KWhPGjz37$v<|F9_Y3tLB+6D~sj$D@Yj6@6n4n-=s)MF=TZHE%$u?Qje( zC9?6iO@Wa{ossXNj_Pp#AS6KRok{`zA~GgRYU?+q5N?_jf-J{;3xqttB%Ln}{B5+D z)DVH?wLv)nI_ABm;$rFx>@*H+1jt!!qJ1cLR0M8D6bfXnI}yk6tAFEXt{K^WbjU1$yxL8;8ZGg-IhutmI2y}~v!0Un30nIG5 zY|cny_IyPmZAyXZeqyE@yH)Dz+c}Mf5}d8vC38goa9Z!Cji5*DGSRBAjfYu1iFOga zh)OtT!jJ=|(cwB1g644Inkwx_BSfYWfMAX6qLE&}l4{*R!A2ISWUSqO8I)$uWFERC zS~S{h0ZGtEfRu(PAlfCUuvUPxgF!TCmCVG9Pz7NT91H46c1#6gLl74#6kgB`FM~|X zlsk8T0Y5`7A%HBsX9$@QiJrlX5}%+=c?48&4tfC4r6RKb2LOWs13IlCdDvcTouF$p zY<8js935&`)e3#!JeoEe%Sk3+XeCgStuIJ+#nEh(M?~4=jPZzMHZ%w((|^cN(z9KDEW0)sY6)+IK(HjXF7Ad z80#F-WaPkAOKJUPrV_kyM{%DT``%XmOVLc!1#jJRN4nR_jRcejB!|ThproEGHNyh@ zLc9r22=J<)UIihMj|c7}AkAL9w0cVG{4nGi4wA4GG@%PY(T0LGP8w@yu||Ij6#;GR zTfaIca5t!(LUu`tTn3GeGTP|At@SmmR};zYEycz#!PG9p{mz?{hMv8Sh=8&nnsqU2 zFrI&PHZ#-JL9)hVCIcli$Kt+4iV6axd)CQhiPc2guwd4k7PVIwv@TrKZfn!pPyM?y z+^`>VX9;2g!HQ^HHSA(xf^3Qes9}TY63h+O79c_hdT!X<(oPeMNH}P`81)u|y%&hB z0-Uhk21;R7jB9baBiqX9Ik7)XX=X!4IV=lV&4fIGIm7Fv{hc7l$eMD)=hq-d9A+40 zVCZ^&vf1WV$*_$muM7+~!1PG96P5v|Fq+J3QQ!j*qmlZZ3%?R<&4wD%t8GRdg{FAM z#k@688ae08rorGW>Q;dNyVr8)EL=qvscF+G4k9aFKoH@o@T5#|nhiHD!2FC*BP{m<|w7vZBfj1f=L2u2SY+ ziE`a%mNQ;ccbifC16pZVyG4Jaj59`7^fa(h1A^jyh(-q;=~d*+0n`G$gx+dRCuw-ppes9XoBpq*W6pEt)c6(#rmUNd()T z^^;uhj?Bfav+-9L_tg;5L7Y8lq<4vHDc#3_(@SPnQ2Merc5`#=bChp7|SC z7Y@gZ8ZuRmEfjU8?Fv7LtQlbmVpmtQ-=FXor`wZ)c#&dP?BBB!$Ml%NS7yI8# zo(XnorODRAWJlc0FCuQ+rq2w<)rQ(~xP0CzbLr`Tb$KAh%g4FD!!u)a=8UU2xu11JE^NkqXq!i0A zjrIW>!&K`Ke`!nNbf%tdGI~%vE&#CUP#H1{?m=Kj-F+Hb)t+8z$32s-h*W`+Z45Iv zy5Ia%!d0rfgiF_F=30!iY_eS59?=u7iG;wN0xhV#C&snI(ltkOq8R7id-cNx6 ziaFfV7kH?exnQlS;+A*fNDbB?7Fa=;fv8dBz&IKPI{;vjc{mR*fHnEJI@(sWepUxo zOCZ*1L``O`s>%(sIns7836YR39vXn3wA~C5`$TY|4>cNGj3pfn5^~abi<6OEuF>}N z!fFI~l%_6l)`L`;27HxAbHJSyF?>V`>kHOBHY%1MLWfyM1nvnDzETKa=| z!X3Oy{FN;c2sgzAg4#3K8k+*jT|>t}(Wtm%xZc->3ic>U4T%5P{h~%3GBvP~Vn7h{ zk~vCZ2j#e55gLe8wxl`tXhDsNvU)oq^B^MoY9lKD)a0kFT`Yw>t=owhM7K{ib zl43fPkxd#&pbgT>es^%OeVpO|=IPq^Q>+Jn?<9n$9j>@VwVsGxrUte`q%D6xv(UYM zU|nAi2veUBpoK?>gmlj0K(D%aN(M#>s=)!q^1;GFvjTP#j^1Gz`{m{(o!F^%C1B=T zJLfL&rHdIFCD5xQJo|XhgQkR~&;}xx>L9P(x~iYi94rc&`2n$vHOkds8@x2bKnMlS zNf7L9`cr)iU{MqF4*srY`KS8w*U7b1YNVh82Pq&LpGy!>uul$5R8v9G1wnuco8Xfv z)*e~pA)3Zu*+^b@Y=YVFx|r%y(Zpn4X*R=1s7?;U2?aTZku)VomPAJ(Ll9~p?g23d zHz8<-ZAR1uAw$%pu=-eur7MV=p13&`AVzY0l|$M!3PFf*>VyNjg0}pkmW;M)TFrJ$ zbLjW-HIP1SCYH}B(9_!ib+%LxDv;*Kt);<*%vi}!zCww@`s_%bS0Oc|TP5D5(&a7C1dMIB_EIiYNO zhtxzJbOK1o`5;YQf||QL4fS#Phz70yHW-=IT1&`|(21YyqE42x&&gOa^cVX}B8bx3 zHH*a=TkGNAs(O#~{4gcJL@0`pLkYp=xUh2AT;GyF0_G1WJ3|EIn`)#BYhIb528T`i zUBpCM4fH!S5Q)6-s?ZOBHGwKcOtG#V>{b|X9H?-#I7@n~h>zD=gedF<3Q{pcmuBLf!x~P^}qj;o3PCl?E$lThd*4w)5;A)~q+b<^Qr?7_58yAzFgC zKZYGr;z&YgXḭF2CzJ*%V`&)_h`2KD?ww{ayh=6_)Z3)nhU^&WGItV{tjK!U* zx_DM=dq)+ViEs5(zZKU+_Yy=oRYZ4FdlA4P_mnhPFlOqMz#|xMd@+T+)dwYaM>Uhc zP@(HtEpCY+&;Y?n>9u&KAOWo zapQud1O(1N8}_!9k`xG*VAD-Xe2x;5q#@d-Op6o^5|`3jQX?r3HyW^Zb$AV&*uu2} zfdpNzNad383lKR1B1SB?LE%!AehMYayn_%hm`ZD&Z7YmZ^D3meGaYMT-H5WC^U>|l zL66yz8N*=HP*vHy&;SB`LTV%|elWSv=GJT!>R0XKXV1}?zM$;Ps=^n_73~NcIh@&K z>#ZjcCksKr6;Z1glQA$Wln$*}F{(QhFo^$2Gitj8n^^AR5%dPTSBRumY^r?-w9f)b zO-FnT&Wz7wO4RdvDWHA$!zoc7g~c#?a|pelUSJ$4W1c-<+A%E08HBxW9qt7E23j4g z9J&<>H!n%zBmlC(UNOSWxZ=5^W;g-D(}S?+Xt7VDo4RH~m1v>JCbI)J zeO4@HPPB_4D9SCfaCaDU;2<_+E*K^tFhk)}yNBml^sETOf!-YIgP|j1>J5s!CC`~G zgbPcE(HKY0My3#)U0|2jTZ91RL_EanR1kE<0e$M4sNuB~4djG2HIgj|1vpoNS$0zj%T#Sqd+ zKppiY05n){Z8N6SNau58J*i{5IYrkeye8CZX!*(v(OPT4^MTRkadlfZ&jLbTt5uK@ zWvDE%1AHM6`vw-q)Qtg0^sbl?p}sXyyy3Q)^~3}2_u=l~5e8v5eZ_b!E(p=OqT3Kk zRk=Fj;D#j0YNWHEpEkhEU(BF*c%r*(Y_uiX+LhGM;slaXvIS7`a#%f-{Yb4aBP&w^ z;gZEwVWDF}J&$jye9kMJC>SSXC*Nzhz)yqh&5m5aw6$EE(wxxZI4v+L3e6Bu6jzzf zAvW^1DfK2s+8mE(#3C1XcYti@Sv}IfCewgojWbF^iHexA0z`r5Qw`k?`Fi#yGPMxSLxV>a;2`rg@~)b-pz&?h8~I32hEZ!rdH^P>?%txBI*8OIOCSJbr% z73NmHI(3{T1Voy4+>9ABLRh0U)wyfe_6-h)FEXrAzd!Ut`~zA+tY#D)+oeyVDdAUy z*79)bvlh2v0H@H|PvQY|_8mokM)Z5;teI2p%oNnY`0*qHGos7RAPjT_P!S#t)Ftv*aKU7n%$kj31!1j?DZr zh&Ez+%nK!_Kbj2Oh=U#|KtF<6b2cIM5)bxwTy!vOBBD_YB~}Xn*<4KC*uDuGOAAU7 z>2t9ax=FER1e_8xuf@e@EUTUp_~0>-N~ewU)lm$SJ2N%Z+I|Te%nLk^f$P=)V0j#* zresXrYL2xa0L5o8)D{4i2qIf$_&kkzD+UMx@n%s23^uzP+@cK_@;bC(mM8oKK+rJo zP+Fi2f|d$x7@{Nh5eCR}>irExfRPb=Y^h$O%{>fa=GK1ml(k{C&B*l8Wa1F!Pd{y9 z^bD>#@i>&T1;w2wdo6UK_M16xk*M3N;sefi)pAwb3^{a4νpW<*38jA_j`T^04Sv6(>sD>*w z*=H>P5tv7UP-Lt$5N%47;loKlQ7%8&3u+gsL&u76EoTdYH>ygoZHE{QbapQ{lR!X`GznkX2MD9gBLp*d3?Kv+I#EPl6*2eeu+nMo zUCB_T5Po2DZN`MJ*&%=`CkA?Y1QG!KW&?;wu8)&|ib}9MbXM}g$?c;FJ%!3(jhh6%`)R#$HXg6y()Z4zNKMUcn(YSWw=W$_u$v zC0MXPg_UiaQg7Cx4cGgEMx?WP2;{s~Fy5|Q*z({J5*ul_F>TF(2Xuh6F(J1``WV%& zMTt*LfJCq)Y#w#wgOdB|J+8|V9R`VxL?o$}6a^YTE4?VR%Su?ts{B@K^0Zc`q9;mO z?Bhp-N59WW!$-Gyy?(<6$#(Mc0v>x|?%ahIB+v%RqZUy~D1xeo z)e|rI>N*(d`miZT(-^P#f=Xu6JI_5yf(l8+Shz_emRq&_@gjpls$ELmkQz={h$Ai# zO&cOpQqEsalt>e7ltgPl^vJRdd^N;{9X=0S#<-hf5+d46K~^FTqF9gJikQq=6T2+P zRm6{}Yf;cL;Z%>T$M>bIN*`j+51}&dpXwL}?L_`jTtB0yO;sp3O<8QUxW^N?v3lx3jLs7h6Q{@L?;7mBY_pd zy#+51awu!)UT#E|Zi6tu0C~THgbvWp(r^;w(e3*cUOv0wSil1WP%7*ujatzut*~XJ z#uVv>VSxywtk{Mh0Y(=5YkuZ1G~Zm`oo^ALzW|!;cmC*VXfU~-urR#PX}-=+&?)Z9 zk-5CfNdPDi!=^P#XKO&!`{`SykD+`UpF_I>eXz>v}l$l9F)++&#C?S%t zR94CaW%Mm{0gFTvB zfNt9{GLhB%8c|-=%~4R;?fJxfLm4_+BT~+=v~{6#w}Pa`a5}|CS&S>J-r}6bUU|&G zxWt#XtwP&$(`K6El+TA3k!Tl33Eks_m2(Ke7g$w~*b7%OM^^;4EW|N)YzR%9z1BSjULQ2EV9o)NDGyA=VsQB(mNE>;q(!m)hPB6TeFr#5dhDT z$mA=)!U4g;fJKjtF5ZT`r-|Z1H8wy4_`j&M`|@5}u>chm3vUCeGq9Fa-f)%?O9E6{ zBOazxCn#gMQb4FqI?lHj=H3kV2-@Fr7>{Kg7Jh+#z5yU(OUFJUo4VYGM5BB`x*gOz zhZ0pehC!FCZQ?Z+l9Rxq`vDpu}Jg$MnbVyv*G0Cf=QT6xek@&OP9q#fVi@I3%@%;FWG z=R34v5BRi_dnagnG0X2|D2)(!6vW)G(fRdzp-cH0fY2!Un;idDGe+I@wYsQ~^aC4R$Z@0U zSn}$WsmI|%K0RvyCzxUQ3|lV5IYdT?KriY;o_!7aA3g?T-GE)AkB16T1aaw(AgT(( zdZ`%z{5|ktk5GetNrKnIn##(n>4Pu-(uJojTy*-v>fD8MT4yaR(3P{h2O+yO6fur} z6lulPMZ%>4fl?yM&xO>{4mJb~cnrn4ViV;FoKKH^{kRjL4gG=wJtDEEfF;Gk!{-*T5P5?37cSg&X-r09;^T~Q#G9Nl6O5FGPSaVUEk;e3Ak|>aZ4kM@ z=IE%p%)Z2|m0T`D9OG254lLq)v*9dUv~c#K1&e3R?yO2sUihkuF%s28r}dJH4fj^8 zJB@g8p%rPbYZ%dniK7aYs)wn`9a-*$m>$qzQ{mbw$-$XEEtjG@hMW%C5aqO9nxFBa ze)!v_Qqkq4bt{oce~xcMH;9xRtl6vsrBvmh=(IuiMu)miFl06?4w1+4HpGFa3?dhQ zjl@8mxI@A~1GL0u$v;$V^XB?U#4Bx@ivsI*9$Rx-opnkpjIpq5ovr$TZ?4aRUU)rp z2`}jjAv7y&v#R_iF+LlrMto>5>WGITN{(vQJVvalR|b z^BG(K4Upy~=)}RRrkx5sfHU$r=YSDuFQ~krpp3kd5Ws>BFZwNULy(K!bP*%=Xc~rz`#S{+b=oUc0Ldb zRs?7sv^cd%m4-#&_OR! z$49m#(d-w7l@z-TY$6@5cx+Y2TJv!PwugeWMXlzRNGU6^1cAe33egUu~;M*cY8N$!qXIgT{$9<|qb#yC*_N5CuTNli&cFk?? z$UasaFb%`25!=wJ%hn-xMru%rw(Wa^g$^-5BjD#;K@mYCBVQi0W(9jMwS=Gmw<7dA zJ`#1opeJ_M$dMJsWeHo7DMO_BfTG)u&F`gLTJ{BR7xdub5L+vojeOB06P`HlX`(f? zG#Tx)6(VP`&t1rAMc4&6TJ>%el>zMM_*n={+haFqcU*wcEL!yK27Dq;dX$-wCwY74$!?3eW;d#HYtJEe0XqxkEy(fQlmi#I*2YpAd<{vs*Vj4 zxtxDcj4j2bMK@_0yS!>(6iaAAD(He(7t=O%YQ5k|fONfUl_;2`Fw_qrCc-;VR|I^Y z0|r-M<7(JS`2B9otK92+)_ah^7?2APt?4Ef4#c-6+nN`tjB>{thDqn~Bdaz9U?Uw% zw8A@3UPq;PM0E4rLeM;YsF27^xPvrFu^BlK`#dW^ctYadnW-$e9ecXUN5$&HHZ2aaCd3n3kO`3dsmYkp2aJca-jl;Jlu>B(Ajr~dTnyk)&FjM<$RWGN?vFqi z+00_IAR`4Ox=8|@E$?h9XsRq`JT!gn0% z04i%3>zz}^XKym4jiRRzojB5$%lL^DbG$Lnpqg>iTV!ebzHjlhfmX&4#AMdbbyJlu zdBajnKXM|w5#gxW@>$1~63ML_Dk4U73&@c~0bQ&Cc!(^aiuPJ@YB;9-g9R9H1r>wN zTjw$+F=>+9EEcmKMU&xlf|8mI@pI?Ed>jQ*u$h!yD7Fmj2G@=Z7dS~9&X_&s$=5iZ zh7+=4=f)FMZ|xy*1P6qo1`%Oh5%y^G1L_N?OB~jKiQrHtU-wiw3W^fqAp(59asT-X}{g>REf=h>PhafLKE?xApj$PQI5<9{OTC7JFgzAq)N?K*Z zjwot(M963s#-fXfjWyLpxsPbT#8FQRWSBJQt9GLcN(5`a1(3TsN1{`QSU$0TGxx|H znsn&Qam&)k{Fm8A`*L#v&dP~Q&9u_K&YhL1F<5|;H{rs-1hA30+H%KV9f*Pl4v4~9 z3ZgsVC?g~eQw*A8i*2<-oZhvuUo*cnzC7H;5$Q}u$hzP%L?4{cC2K<*&oQK8FwTjB zI7`|Y*&*Uq6hz>-1NnVl+n2M=H5(u#7dMk-f zG!Pd*n*a-9DnV^MqUq9ThO`ixBOv&F342Ru7phY;f+SjDgk|PD^^)<^4pl7m7@)p; z;m#T;L@+|M&9yK0!rr-i(61xm)DUIN`+Wmoebg0qPUF2*MGL9V%7%-NQLXv*_FvpNYX7 zgHzFx5PP9t8I}&I#$6tOBW>VviHv*Vj^z1C zo7|dLX5v;Mg6x}pEg&X{NTC{e!*sb5vR)aVwQcUg`JJa)b#Q{c2rY-3BlhXokqASZ z^i?*r?E=>UsB#q?qUF+zSBb5r2uR>W<5ZFDSKuSD%{`3GTB07Lj!2CFMk007KFQ~b zy4nUsvR|~I`dZM8P>MKcxN>82Ti(D~DM0{cUG6u@tYLTerqvbzct8R$58|}ca4sfL zQcPOKw-WUVhXHq(;B3mQ;T8xznYK!U>S8-P9D_;ZS`n2&^*KhMu?bBylTb@ zet%&`Ha7jy;kEIrIJ&aHZwbcAkz9r_)%6hPjmn?I3{@|+UIER^~S;n zC>6__&Xv0)Dni3eib;m?!FOk41cwmBMA8=IJB+gcvEL5A`Zbo{Lyq>GVXz$ps8GV9 zE9gNjc#Y!Ih`I=F_=UBwO@Ifd$4`h=mUex);K`D%OCaI|agB=#P7t`t#M#Rh3vCYA zCl4b+DmKrgDM%=cC{G6d(Ve;qLWk&^*Lo+-ZEu&5^xVq@QD_35QL1tJL`P{`D7qf` zc8>LwLuR#sdg#~oeXxZ>I_kUHYs_Z8lDD1U#KO5F(87mFgFbi2i1bfp zEWDNuw?TZk#|$~<7atr`0toSoK)ynhgQFqvN*Qm8Pr4j)UX^-cLJr6PWv<1fPtdc3 zW>LuZH3>`uP&eoUs1Oyaz>jod2~o@qzjF>gv&2;@EjV}F2V@GUZw5W>46NVzk3d=Ppg;n=U9$ z2Wm;(*OMjLIC;l$wIdJ^YLyrtJH?3EOj{}4P*Y5?T8zeWA24u5u$XVnYg;s{6UTYh z@TUGAU4K6g=r`PG%1=@fhq7eLl+Z)amw6NvJ7dOvg>oix&2U6UVBzZTPkclk(E1)*J!A;;Q$!Yg)-C1P zN-JrY1tqNQrEt=(C_EA-0hrk*@~Wl!M|`BP^S933pX`AgSEprI|bAYR0Vi8fq6ACPk@TPPMON{}q-kqgNY z-m7CN^+tB#tagT)8G%&8GtV?3Ep-;^Y3&+siF2k6v`ukF7bHp~QrFAL4qZ%{1m{#T zO%bR@B%7j@?7&T~Rj>koLy>&!aWkjRJXS5hIyz^;C zeuUK7&AIC!0Og_8&ohRNMi?P}%ijGMi0DPp%4i%CFLPk1Zxv}Kaq!b6iQvbvD-fs% zktBo#A<0pGU>f@(7b)jlDK=7w)woo>y#K=6Li-m>JuhRFM%r?^O7MI1bmY!e6^P#tm@id$rnrjDjhOxHx zcSO;e+Uk8_gIEua09;855!G051(Z}YSQtcuIq5WQnzGNXau8IBaa%IClpr0559X+D zKDZ+Ldsj(lpm?#DLQqN_>z67c?g0IEyg*+$v+O%~z58sGb zJ$qms#Nh0#kpKL)3V_`RCRR1(7`mFnyCcW!Q9tCOFhtoA6{MovQUD>f+_xN`Q;x4i z1MJaMZUg`j+mtF&S|x0feSJ~(QZ@`_L}Q!zfAQ1F6d&cj8mqexPf)ss)T+@{(A1-J z;28bZ#=_Nzu1W!TNo7^pK<1o|>YHon9`1Iy1eIk84W>qa=)Y)7TpdoW@*T+bZL`xJ-Surl*Q0JU3> zyNx1<11;txN-eqQ9D^`+To_@lEfNj(8#^u9d|UYl4QI-Hspf+0}e?H?^(|=$pS``8~ss)K}x^6HMI`V^2>(@gKWwBX0YD3wN608R*NGz7E9Qb#* z4~dnlcH25UtAA66euSMLp>rugCbN$Yo>EhFt2?H79YUxM;Y)ok8x7xX4O2Ezl?JyI zdQGC^X%Bw0C?FtoaaH`4<0}*Lp2&Dut6^EOc$r+9wi@`>tymD!<3=!ogh)LVYRRxJ z@Ii?`(V%APas_y^;>-=&iGesleUgjRSFesnxDsP$ghtHB z7IHSZvFavbUMmDXYT*oknh8^RPG{OV<-y+(o4}74=eRfsqug_21-HnFVBlvUwD=<% zLEfdr$LKl_EZ{t7sB2bGB3$*J2ZgEoKiFh(d)3gV*g^vvVcTN$mQV>oH^(9Vc$*5u zBUV9X--ogS&h<2p+k^86m=C;s|FQMWb8S$BOo`ywM^AlIWaBHq%SF~?h3bPLXVN+z zc-v=*OV+o%mz0HU^2)yRK&tfQB6u0gD+eE!4Z`*dIUaf6PDGh@LhoHJi}6kHXjh=^<^4(PMDUhyj`F$b($rfli1c;3^F_Ur2Wk& z9_)-pxQ_*2G$ID12(P0NVJNV}7a?OE1_BI{DSc)3VYGPgF@X_XYyE&wOoVz7r&d8?AKgI+DE>SGzus;b z%B`vnLpiG{rxFbJ%?C>sxmi$j433>{@ff-SfpHk5Bs?pkoMY=bs3vJ6IEdpfGB}^T zQCJRrY}T;WVw$lik!Xd9M?j7CB6O_a1j~kGCp=9lY+MZ-2>p8?u-D5cce$?XgQfHO z5Vj)YR-pI`&Cu1x|N54AT>pDH?Qwr zD;qu!)&{)NGToy~2{I95jSkj3FryZiFS;y=yBRR6tU9Ylr;)xpF;U?Q`h%qQswhpj;pcsU82j)U}hk~GO zxpw>z5m|^`Q~q*?Cc6z!G7j&-?qz-Rx6zyow^X<&kip$(1#&3xQvzAq7p9(LYu32qM z=XwwysGW$V%`uml6n6$}w;+m@0IVEwMB4ibLR%XibsV%ruT`7_a3Eh`Oib*95}cF^ zEtuOrUv)JI$HCa9k-?wH!aKmb_O6({399LSIQ1`Zd)Pq?2DTVO5N<*nf!z{=J39>s zM3@;1D9x%}X1C((YU{9DxVUHtL?aDV2G*~}(ZGNeYiA))z}JhQ$$G&GDHk}#owgeB zLJ(gR4uU~q4^bKJVt|p!$RK32BM~iZcH;;C>FQ~7&p3Ti`EqrB0ArnF{j(V-D_eEvpYd%@jFEOEr{!6DBb z0r)8^K~P;Co$aj)=Vxo>Koa$1FKas1*qU-9BP`5poY3exRwI(kj-28NUWo)wkUAzp z)KO_!zpz4}Bn)H>K1{1&Um-7o;Bkb8=k>$oN-&H?w9w=Vor{vCRH_1KR3g6xKEqc_ zzCBF%U$}_(tF?qXOTEuEgaSxn+z}c0`Ss|q>A{n3Z}XlLQuz*1uS*q2ADqLTRptx>m5j z!?{6ZJ+A8Msqc02G;cmvtG*y3cILXyCXE(wUZBvWK@WhYXZ=yD3v%Q@J_Fw%B|N1k zMl_aEcqvMqkRpahgS2u(MV_7TN^Gb?N<=pnaD_^T1qMLC2Yf^e26rML5Sl8S6bW<@hp^fR7zbN@B%kx-^$*eO+dg% zkqyCJiu1z63h9#*;VfX|CCqtPEd5-pv>{Wl5L8(PFJMUlFX30DQeg~uz#(0Wd_Ajp zP|8UjR^SNWp@&!yzxWJsKLlGG26t%yzXXHOSl4yUg@!_<5dIa5@|Zr@st-wFW^rjU z^9{+zi%YjAZ@9Kt>`1OHezd6Rj~0K#j2{($S&|H`d(WG^?!@BaWa6aKmbLm~dw9`| z7e`Gk9kaDivaZvM!pptU`?im0m)g*!q3k#`G;Y_1;YvF3t%U}RK5A!o zw4dz$w&wENcW;n-TMOwZy|L8ZhoGH9jzq`3gT;M6e_+a z+k+Z_yjEy>FbWi#+$ONWAqX+uWOq z|6N4-zl)cYb(XB1-m}1K)^2WiG1}&amwTYeJ$Aggp{#B0NVK`(-3~W5l-hfY&9wr) zxlxjvYsqMHEyp+4lD4@|*gAL!%CWVd9Sce81AsJvJ7{R{ouE)VVeJd-3TKGM_HJSVDmpwVh5* zx%OYw=M=Os<=aFq-!6WK4K3N4e5d$#X8gUlwS>1@OK7$O&Hjn0Kb0=QZX}nKWt2Jivhspb5`P3QeVvLekVy9z`I;~JyT;-_HJDCb+&_x(z+y z&28l;3IBK_eRiVHYg**ZH7!rH=$j{6o*E}vPmOzNoMyc=?r)m)w{e$`*R0FOUyZ?{ z$*afTU|Bbe=lCD7@!O!Ik-m=r`#y}Vyyck-bZE;kG%f#!>%eW$aZ`$0E6?kv@m8K@7&(`u^ zX?i?PKHhXybM*GA<`1{zTKjOzy)DuEdy#Br*Vfv-EkDnff4*h=xVQnGO#t3#@n+)m z%sjQUp^%)~THf-+1-fpFlRK~^lD?{ZZ5d^*E#C={c;W)RcSda~8RX%gd1|_$kWM^# zD;jJ>1$pFV=xeqcve~v~vw6=hltS||ZctXyfLpoSA1mEW1eDxe`UWq6Z=liQnaNe< z8@PAL4cJ5Ee!TqICglF5=~FHE`F6`s#}&^kl-YL4NW-+g-ET;{gc`K)-O?{4`3ttc z80`yeBv-b4s)aC;u&pE^mg|EY!-8!!m3?-ff4DAUE^Fcetj!RDVflh!O$J~&HH$(~9(dXnTtr8!9} zUXj%*w^`u=)~P5PjgwbM*PY}i?Le&KL+R5ge%{^q{zm*fSovNBKR>Db3O_*S3thgf9%PHcAMiK5Ck*xyz%TIlqv?yOJiM5`oMQc6PXDt}(x0r{+9a4AwQFl~5g$cC z{<0i?vD0mD?+F?0|n7 zYWjbq$l*Owe5#0b`bEuX%MRn*!E90XXO;cGPV$BegCBOq%*z^o(1@f=q=P*PL`GGg zlJ1`J?tYM4928d6TrTTgpj-Zn>TB2gqmTWMV24MXg!!Iy6$gJ+@eBl2T)C9{kX+q_V|`X(JjW>i;y%V>%hL}OD=QDLfDuaee=#jh-ikTC zoVE-Wviz4Z>6)UKHDa45Z{=mfL#=fRVh}7ej zaA-|6LyFeQH`syg#>S+17u>@Ha5l-k)*LQ_K5@tOi5S}Ct(#$;WHRij&(9hp7l!oI; zJQ$LtVIorW?>R}Kp>Y@#vyjD&;N45b$^mastT`Uo2_ug(O6M0UN7~y032vVFV(Jx= zLSy6k)>z|sGzOgO#nWPYF3G*my*@LDLohtAl@yKw&>Z!b27#F^>8F900oT7u?^Gze zq_SCYUAb5}-Uh}wLy8oVoO2qbeZK5|iq%PUbRo%8oqK&&Ji1V{ zczNh)R=%f@EKQZ3LK@2y^%SxTd!eVjp4FcI*6@Dq>GAZ#+S7}Tf0YLlm8ApTTVWT} z`)tFV4fwgU;Y(7#0CK?#6tKjVLggYWKOXqFIZBp5}4Ul|YWz`GC zvnp$x_8=??Mdfdk!X7}D|CRhLK`-buMab_zmprenJjPZaHJM~1+!;w6!;lQe&~tLfkn*>31ILNwILVs8K_t%m zZ1LZDJ$$411O8lD`eX@HYLJUJ{dFk1E8gvU6#i7-j@KM(^b%{5>^p(^O{Jt%*TWCk z^pfP0rBCyI)s}ZZMKMBBfH){Q^e6ynW1-@?;CW^1FxO0Q>=L_-i8EYX( zTKjSlSuYp2QL419bafhW`Eg6RhB}isvJJ=u&bX8^pi7J2GU?K{ioapTZ;CHl#>>Tf zNjTkGx-Zch_a(m~jQlFOI+YA`QY>?f*okTwEUB!G8_P}q+?ss4_?exR;7|a!7ZUuC*cEnA~MgcO~EF z;C_-^Zi53J^%loL6a&HTH0!`*c_A5Oc_GK-yp=Ai(bO~;OPjY?wn>{mX35tA__4#c z`dh*vmZ*?ky~KC&Pz>?v;vKRooHu5kJ{aEO-bu#q1p4}c;sYeC>5zGUb9BAI@!r9*fq4|%8*iS?7;m##~qbilIF0FGj{ zqfS86C(OrCIR=I7h2Af5K%o*Rfk58Uu4{0R;1k{d^lYzEI0j9fdp}xAo~3Z|%;Zz0 zC(3$>b52>o(*=&s{ksAdO9?zFnG%=dFj0&@EQMb|2>HfHF0&ARq!8}Tv{Lcj$Qf3~ zXUWp}K*&*A0cTv4&i>GOiq zWQV_KYY7$&wGsdovkU2OLVm60AiXraIt+_@#tQuDe?K=4sQz8{4q5`${A7hyInX~U zNMxn<;|TXV3}ZRtt@!iS6~NHNhRUa`U7k1Ge{mAWE)1jyf=v``%2GX4@hi$;%hWMs|I%j!uaUw1AXPUX zEPj{=4Vd@CRMahnqV7&r)BzXW5B!@|E#&KVdR<`L4;Oz;8R@UJE;6JpP?Jl=(MmcW z0uKI53VWHLdawP0n0mhhgIN1O7n2WOBrtwa@m@QJ-?J88gS!m}&yxTZX&8TkSkW{5 zH@&FWd!K+=PWU^73fEtl{Jr$7sw|Rc%g-m0^?dR`qprvULRF#EUmI`J6;5ued=s1! zvcB1LbF-GZ8Ny9%tNF(i@?t4}45^)DZ6Eh%if@ti=keFQMzXGZ&Gwx%Yx_=D?#wJ7 zV(vFL-p*vg*LWj-t@tSueSfO-1OoWn{2lWU#MM zF40^sOOgoyjYEq%K# z{pPUrke2JxBg>W^S-SMdvZY7XZIv6a&d9o zQN~{zFR36`)~hS|VdXCrgZzcdrn|*595j*y7AD_2e)D+#a=85EXz`juMY3jO(WtJI zVO&?fg`(11IJgcB?yn+$kzqg^&u#0#3Tjh6HU6fzgmZB)>L2_9sgN(1x0BZSK;uJT z+meSGp8yY7Jo`R@1^#^dMVon)TUT!g-IOZ9G^#_Om<>%uDCKmfP_i^Z|YYIP;j zbeA^WrA>Ef(^Ob-<E63_B%oGX6QP;y=^d z8}V~{<9*Wm=H{<7BY9)X9pmtG@A&VJ$Il%*J-QQCQ+umx49!&0%zcgck?K{gUe)SV ztzNAGK#V^d&%T`azG&!79nYEh@tmm*o~aF|= zEy4xizg!WJE$rw_En=I#G>l|F;LLY5y^kgdtel<^-t2`pmo~j8yg56(c`e@jvvN7# zU>!WajHK}9L!sbafc>9UepfNrPdA1)uf>}mR-WSgo68E|grEK3x(>5-{j5C66Zfc{I5Ka+qxw;>iC1avVI|S@{+O zMRMjVZ&{;Nc5f;V{!(S07*w2n@~PKbQW-JaO*Q~z@}F#0xU!gh+LAjd9L8@k)sTd)Q320$2*ev4h;iYOGkwcy?-)JB zN%o}w((|oMQaB&`a&g1Y8}Retrki;oe7ott@PmRf*_%VjBbv$+Uea|)KG|?r11_KK zmCKrnXTYk-8^(Tl_dJYmP8K{^#NTfhIT zKI~po={#67fRNG&M=#3f6;iz6TCm?VdR4(ImEktM#@7W!D!bW^ohm4VgH0RPIh>SB zgP_^RHHQ(U$+%t6uitKQ(efbrE^{vFxR$H}Yxv&e+peI3j;NfL2O+dici}D-DyLch z2LL>P)fQTEUxHGWN$|5JxrPw_+XON`u9a>@`YOt%6o+Ny z*w{G8aUZhG6IRuSfi~r&0o`(C_(|rxkHlWRh zFg6Y_s&@$Mad`ZFF?kp3ysKd=a5nh9tsE^y>XgMJeOu*Gpl&d6#WMcKhMo@-71{9i z@^&H6-{0^BR{TQ415!~J?(OIJxu1x46DLVaP>Xne8RB^X`0WA9?}LK->?;KY;f(qQ za$wJA6EdzphH-(6Pws1eS}hA?^6|Sf@b25qz^C6v5n0{3>St?pr3uowa#i0{*(&~} z4FO^ErvF9xT|^J}G<{vKb!oUM6ycTsZ23|axx49ssK{$V5#IgJm;VV&1jPMiB>^Bp z$qMkz^W_%;HE>|4x)-MOo~94-ijaN}4R2nHHtWN#G)QEouSR0^21#U- z%E}&%F&;e)lbPO&r(PB`i`1yWUGaWbzQSCye^G&haa<3c2GhK0>=vSj>HWy*XBAkG z>hfUfS+}n+#Pr=^G6w)`4|sh8CNpv8$$lCZX{YWUY2bTE2BSATY;b-+LSk#F};Lpr1{OMYO zd75A{*G+}p9DzU5zClUU3O9YCSeMLPfoH*%`37oB;KuN!LF2j(_BSnrq3@4D?SH5Y zDmnB-Bu;GAMC)kKAoI>D9|AZygq0yzJM>f}PHlyCZ0E$v)}*x#MzU%xm}W~Ij9@ld zkwX9z(lP)9Ew`g(bc00eXwXtKtbb)r=}uuOfPRuakHeqis{kGRGhs)%Ybf$sjC^+m z20-u(fI`xCrs0fq|4@v3zW?imR%APvS=I#K?LHBIX2kFisM)w6`kIIyvTn3g+!!}~ zcM$>25U?=%GHRu^gbpbFo4&Qt(ZQh@*P+KN035#ri6xhrF#NLO$0-c|c=1-txV88Y zGagb)bD)p!6n`2c8SNoz`xwB-@$2#Dvf?(%#;q)jcOU#$GyE950dIJ6oZRSpIE`G?i{zJt( znQ>?F9?Os(;+Ar)Kox%ihB4Zh9PCHwyPdV#lOcFd!Cp)I#`b)u_$6k1N&7~I^xbZZ zmF`&FJHh|ZDf~O-gc4MLL+A7PL&YzPCWV!eOGE6&%CojMFafDds_2oRIS7$4_$Ggy z087Ehg=i1mpSlbs%8li*tAjQ19d4+>!#3Q)!MXD{Q_tVb1z6(+7ii)F0L0Sd#^NVz z#XmvNSepDhd>ORB!?a$+6%X;Uja(W}9=hwbNgTRQP^;9L z+^bC@Lz=Wxm^CA(@G171yWw>z#NlBwGq6lEI2kO{%w8mVIT<7__$asVquMjlpD03^ z(+*{hOa>X!^QdPqYhBLZ|I>xPj+f&8@jwyT;aRDc;VE+qG+C zNY^#zFKUOU?O;8BGkE^aSs;iVJB*xRwvL?jz;jTKY3oQ!>zPP!v|gAO^>iY(_{5XZopb`m zV^$Y(y4XGv>tT+(1XjEz4 zLXXIhk+sXnG(*PLj zF8&Ss zcS}B>PyQp9R7;SwB}hC}XL=Z9sD~X{eg|aVM^1-G1+5>Fv3*ctABfMB117|~ge}1#kYDT*)`E zSn_=8gDAq~zx2dV_=ib(c*54?hsn+Vqa?j#we``O*em$mPcLG(grrn%22SEll$z4wM{?ETr~CHBGP zPDjEU_Wl%xuf2PIuJ_AB;rF4RN6`EGk`HR{r*6g5CoK2L2hcm-Ywx#*YV7^K z4BidpA6f2alN-=G-fQnqhHC8n zQ^_5n_g{rK?ETtgoAvJbx!(U23U5O{&!G2h)!L345;LNq44GCXB&FFy!2k}o{9ICZnW(C%0I>;BTu`( zHq>MHcbD%E-G3^)VfUXXf6lu1{9N~64uyYQOos13k3TN{qA0Ux;upp3mc6Zf2f9a| zcK_8-kKKQW?x(gb{}JA>`zy=WSofZvb)P;Pih^Gmz6br?QT(EI&cqkV_c2?$d?A!( zm$!q__b&ey-muH9#hdvC`|bJc68}gBh>u{p*NF~&VnFtqLvh(3dPI2xIz3_uo|i0@ z=cQ*s`^A4LB%tyDi%j%z_$ktJWvS(&S9a$~>ke@O8obtY)SAAuv}Lt67r*Gl3*2xn zG5>z3a}ZihPc}-=o}FA5v|DnTi(@Tx%Ry`hJCP`X|~X-giILNb7o=hUx; z&O&$YqOcSH8YpG;UJWQ^rC$-09u5P_gVMJ{ejb$mBjm@R3(|~ zfs((kU%XPK>1YE61*MQQPzvefkJD4(_xiIuA) zVOy4dITU{*u*<9k_|yItV%1{h+x7~czr-yeSsEg4$In1u z>o5p}97KoIN;ct4ffksjgCF5+}$l0f1Yfo#}M0+0+edlT7ye&l3TZ-4Kv@JB`54i?A zlM~q>?x5KS#gi;zgGjWmL}DcyMB+RMGCLv2lm-K*M@w0D83Gz5giM(YqrOjIp%dn!tGOe59Jz$u zUZP&LmzNO0O{az*c89Av^RFMZ!8>I#Un@Q-zfZEE#mUc#mzN+qyu9=QF6ReISh2IC z*}TAHws3H_KN~vM>|ZqAcS*DFA~&}7~2obd(tFKR@+E)T~7%@uPliMLs(oMUmz z_9<-;VfsQg zkdM4gTT_;KuTDLdnpaa`XJD+IMRGg|rEn)tdLw}FjjSTLS1YA|2rbHb@3A+gz4zfL zdH4~4d=OB-wgS^I0pSg6#&Cd+0i>P3*sG~rdEU>AkTL0F-_!2Q2JVYIlwT};#k2)P zE9t5K=|z&tmRm1WK01Mi!mSsIgdv>}3c&9*Dd1qxgu3zx%RVwa|DsYlaZir&N~`ru{5f-DdH9J^@;0Ezb}5){3xyIi zknA7aSJJ)1n;E6yJ(J^C^Y5BL{0&{8ldRNajB)ae^6<7&a{O{UFJCRsYX-r?`@g6- zmF>qbz@G&uhcTgCYypw(AG&WSO-67?UfIVkz@Js;;Lka0g+K6iF_5hM>#+&1pIRE) zIXSiykDV)0v`=l}sGLkqaTu28X0V|<7(P*Iw=g2KJJIM;m@+O0IqsVkNH}t zj$=dJmeSy!Ny|PYJ0QnP&j>FHJSc?;<-u(wIRR-;c(n)X>~Vl?W3&zv0!xMvz{$9! z0N16<1Y(k9=OJ<4+coia*jRMI#^OB@IN7YSCicYo?Kv4>H<`77!QOraf$$2gRl`+a z6XKdnl08ocjyav3gB)A-HYDE0W{`M0{3j84PMdM^tQtm6yWdGCLh&Bvm9~bLloRfL z1V#ZNVn@=><(Bo#s_%~cy=LmM^4#oLg*FT6$!F+BC53&kR{KDn1)Ny?impiVl_Ku? zGjZ2LR82w}T46Y>!jUcA$~YXz*qYwQNQC;2gTO!FIzCxSviK+0S7-8=#vy#Jgt)nI z5{0r$B(rye4nX082zyd=cM zMWves)81Tqti)sZSP63PvyyAdPd5=ZpKiLd8Ob}Fe<_h1euo``y(F~p4s`g_^jXGTduQWKjlkRSzx0El z;CS>ierX*3=i8qbReRaoj)_Vtnobvn{*GZw?gG^n>y}j>|W)7vvtto z16Qm(c$Oxs>9$gfZf<1{D+1I@4DLm`LJ_Vkq|;WFhCGXtgN{J#gX0ky?C9fB4gLD- zJ0( z4NcneXEx~1*P~T`X4C%6_WhZi*fV;H{z;FyL3btBl)kDa2k+r9mVA{vunar!n-o9S zH{RZepWh*z7=AWaK8YU+xE?xFLFM#x+mXgvSN5g(B^th=R&bt!h%3hyhJJ zs$ob#1*~kluoJ1bP3p5N*{dBF8VIoa4G{M$SKjO=#;1Tu?A+n!PlOqtCbReHAus z1a+7)%HB=QpJ(3Zn_q5b$(OkXRapZj?`pYp9Fmug``kDr*)8@fT^-g{u-{(FwH(3{ zgjs{Nd7;#i1k1l6Krnx=YW{@u^xc*}2+sUN%m1_>-*6^s7iFoum4m{f?^Yh(Gfi&f z+I3;=z6rs0@=g3ui1f|!&$yz0D*suMe=c7JlMR&qRO3C3D0WZdHyEkl8;y@M^?2ix zNO5h$nx~wT4;CdCt&vb%QVS*8s2Il*9)ENJzZ?)A)3POZS z1hHU)B}G{3jxJrpq#)wAA)KEfdVGLL*Z`GU2UKcqyLtzWYdex}79XplyrjddDT$Ro z0<=EDra*nMsWZJPr0<}m`u+)L3zX-!T1#mET8U9>&U8WjL zTSC=+a8)hs#-HxN(w0-P29@Wm?!n4NXUQ`KW}~`$qS>YEgjubG7Nr(e>X9&n-LM0@ z?WMP^=Yrjy>E7)y74o&<*DS!T#Yy;*|GPB>W|XewA(@v_3+(n}KE@<<0Z@*YXB$KY>h2l$;-oHev0@?HJMOc$|!Dcff9XIoq z+pO-<*C3V~Qa?$)4r3|&`88>~UpHKqB6V2`pM|dEipI@6qni=d11tB+|Du74TDl(~ z)-S^WoNVW33_9=`0~ro7ZY=$l8NV&vPqS8J++T+7z9V@8L(vQw4eZp?yEW!qayK21 z5hEpi$}*lxpJB!`7_U~5A$Q1-CBso!H27$g=MV{QFaAx)%o|I0$xVKL`C$Pp>7yyK*%47?_AmWf*rvm9dOrtu2mJi7_y_(xmB8|BN%Al!AeiWx z6}qPkE>=n^Pg#-*VICm;7Y$Vw^c2i>b8;P5>5C1rSh_@B{FWXE6k(*rRcx}eFzJoq z?Kn(e+$<1jm2njZE^0oS^GO`Itv)BbW!vdpo>AcKSz$09iLaUEw=_&Xx3Dj426vJ= z6(7`O^al#nlOQ8)bJCxLfvv|)0mDMrNz2162+Yn0n;(DD?V&K$eY+mo1dH6M2M-lM z&CWX=IUC`Ivlt&r_+T-6gL;)!w!%E@#QLSM&gr+qoVvNg=loIN;GN}%1P&g9*&wqo zZMabY;a)@nW%|DKC1DP9$vHOuD@Jre+%S&QIoo(nx4BbS=2n8whjiidA&=X^eZ2Tb z9$fa1A9jyJ$lj4+=lHoVeTe7uAq>HATE6$F=l!uw*Rjt|_ z{@z*sv__AVu9hS}XCIx~hiWIXNkt8JlPKX@;YZdAzp_^Nm9@gJtQCG`tw55{+r6PF zYJ@20o#o4QqK{#sK(P%7Kf1#rI#$+oo}q^X+Y+v|;B$sVPh2 zHHdnDjc^!P=#VTRi8FAeRVK5D!yPBlQ%JfxE%h9#iE6aomAkAh!~|y3U$LZxYl)L2 zoKw$83gby6B5*%->q0AJucBUdq9m#udZABPoaF4$>#!jM1}DMNd2&A_F(FU#EeikD zhB#Z27?Wr4!!C=H|3loHz*$vX`QvZ7ecyeryP@}nZhB*Db|Gri#JFbHD2f`4fF_ff z$z+m=#%PjJ5kXl+*#%@*R#6B$sDOeSJEF1+A|MJVARxH$`+iR?w_bOHW@i4M|5Li| zS*q&Psj5?ZRX)}$!3KPNYhq-ud>%^z)Me1;fe)b@u=cEue??X2f4q2$3QD;{=wCTA6)23g7J#7@AB843AQ%z<`jz zx|qPsKqaIS~5-4w{)@ zq^5I*24+J2e1qkCKd{S5>5oq0>4`3Qm<3CZwxJ0*SK+o{OvR8(KFDXse<%VItt7Mx zcifLZqtHK)3ag_HS=wVLa`8*N2u*mp;f%=+j9I{knbeRC?V_`={#!Sb)DGFobh z>e%u`jWLfym)&FNx7~sxt}DofDzzed0tlUF4sT0nyd{or;_4r8fY+%}X>54BX*mnW zaup;hj|9o`!CxA0XRqZ_Uf;b`1=%_5`uKmeset+Rk|;=+j*E_9Z)XHwhA?x${;w_L zM9x1xQac zkqLHdzkw1Zg#8C2oXVq}wmkLjB@XX&T--FcxVg~cIx^!wgke$O*TV6jt)u(Ax0q9$ z3dF8l@78})miyoS4&d**)K)6g3@K&mFK!>OUJl4y%YoFWDt47dReji)y8W>6;%0;w zH(TEv}N;A74m<>o~ zREN@!6f3jYRqUbxX%|6#*HWcBV?g>v z$k*x=>5vVmsl6=qcE)Q!h77;iI=$Mj0qGZ;;tF(%)OI8wax?;ZR!O&i{YMQ+-NgMq zMmyfJMjINz+0p1Qozso_qqpacD4R-WZrMuq{gAqC+9zdz-VCTUbJ;-^ho%}(QWpQX8bGP-OwA}rU1~sz*HS?Y6%zsU1HlSvn zpU(V3I*5fM z-kpCG12ONb{KpF5j4pVF&ccG%>AY324~|$_f0^~0fMH2|SJfheZHpZsn@Wor%U zKn%!0&=5uahir@HC2c@>Ll1PlT;uYf`|ic?{(_0o2Pbc*_i+!U8jPlK%j$OwlYMCQ zf-yQKo<3$f7$Pv74W8E2h#A#Jed7Uz$&Q^pUJ507n0i~O){Er%Sw}Lm zchnbmG@&<(ORT$iFJ8CiIu!E22FDMKH$o|{rY5fDG~X|$vq9!<8~|oVr*fe9;dLKh z2j}DKj$Mb2*{6_^8iPf+Oh^998~kL8M;Fwq|9#Op_;*`8`>XMC+H&0Esj=J`2_X!Kc|lT*AKgwH z(1_^I*=_`6Kd%w`#tNo<#oG*xX0qLd_;cZ{C?2=|MsY>`0hU8juoI<}ks7oX$$%nK zM)0im#F=^wbzBgBH)tw$TrxQZ)aEuri>s4kKvK22Ld|~Hh%M&I$0-mDgP6l!kO=_& zEhNt2Qf3P2moWTB*1vdl{DhQP4L|M9>L;Ys^mD~o{e+a7er`OgpOBK~C-|-Q!L%^t zQQu%Zbj^5suo!6UC8pW?y$$~*?)~vr*L#o87I?k$W^p{rSH%p=PR`+D+iwj-R!xND zi{6=}GRD9DJ(ELu3_R~5l&p(xM@_o@F2Z-|A^Ci+OwIQfa|h3EuwTOBpFn%zE}B3I}8RZP>8<@@?2qIG@mh>*8lXT{!R9tCFRQt^qamS>1kX zzXsIQGwDBZ7a|(K12sXF#2x7aS_;u>m#pT}>^d(aH!6sAkzI|EH#e zNaMyBsRoVZ)V3O#*JON@L)7W@UaAKV=yP1IJy37dONgM}exj*LZ&Ejmhgy0==Kn#n z>kKrYPSLS+ssSYfnIpeCURR0?)=7~;>2_UG^hMTCylKG{{aOcOQ)CfL(SK;FlOjW} zD@BiKcAX*v>J$~6P!emZ0X21WI@N%hT6r?fuK_i6Oghzonws@lnqLEI>iy|d18VA_ zbgBV0waclrkPWD*Q#DmrUjve=e*WC<>cflFL-(lOC+sqPg4uYP%o0)>%S~QAp}-DL6KYDaMYNV%)_Z-mcgO+-c9B|G+9J(efN*JweS`2KS$G%H%PI)_J|W4s&qMkMjNx?D;c$`>_1S=2 zsN>IXZ)3;s#cR+jZHm~T%D$ZL=&N=Y7PG+OddHq)q1owR$9n@TtTgDs3Em!2VM<## zNn`BnHQ>5J``eH`xC7<3zXAB0__341{?Dw`&7rgAS0N9s`k5qH5*3nLvVFnT3Ruy( zorV$``Lp)R^>Ap!fKpzf!Qft^7cBD2hIj{o!??jHO;y7knkL_PU`5qOdOaELz_uE8 z_EB6=o9vK$BS-TF~SMQU=c%N{0=5I>8b{N&_0kp7z9YCOCKbzM}@f6(E8-L@SD1+ zfojChw|Jflm%AOHbc5x1HqJ`W#Ik*tlfl;xl___uxulWQT_zx^J4XYpL;DjTG#jHyLW zeer$e+vAs{N>X;U6`0q&y}|>1H^>z^aGs1!jHQ>6)|Q*S-<{D%I9Pd_@4u2yu-Wc6IvSlF|EfWo9R?xUAtNLh4fMzi zp4nkai2raXGp;R*jrT74K5jRI`~6E3PvJ@;e&S3!Num~ifb~#`vWPRoGV2uapR{;Z z=4Mz_r051Kl{q6YC6Tu+Va{@=_Ctw8-$$k>&A?zH5KkYitwp*?k#r;MpWRm^i9ry? z_5)3@Z4hjmCEPo^gf}1J$scnspSL}R#|yfN9P+28*W0jCeOvf&Eza28gu|yxSo5$T zD#6`^;7;j{d#Cso0ylxP#gnyNkhsr@{T#0l$GTT~XOLEaOemSQ$KEISeheD|v88}7 z!gTT^(c!_-@Hndz`S0j^IOnKtk(da6&YFewWjE|w@G$IrZl_quz0 z64yz14no#N5R)jgiaMQc6mf*=C3SZRCoBoRfc>oyY%up5boCB$GYy1}595g-Mna}Y zE@YL`7?usKMddhI#O{!H`|nUPes?cF@71LQS7CI*RTxvHluTuz>4+@sE#;wiY%I&e zSgHzdH^r8yJtRv|zZk^!*kR(Cr39HV09Wb^$zwH@pCg6I(ZdqJ;n+iQSY4B&CM)yl zQ)OdV%WL}V8FyD%YX(v9EhE3FR^%u|(V&seew@$@mgsM;6|e{BlJOc`V2X+i=0a}$ zP#oBO6B_n!B<|O@Utlt_Bko`y2X!-4rKdmHQukxjzdqa*)5Y5n-AiXv3`37Ds$~uN z@LC=C5K0&B-?w;x)So}W2FPvVxTs!DK3X(D%!;pjT$M>a(T)bjfSJ70NLq4(@nC~E z6&1&bM%9ybHi9DBlR-GK50|}LL&+e_GU|V1d5QBfc+y2Gn?s0quk^i)gpIj|zW`)4 z$(xZ#+^to4#WnWxn(L)mq(c2mbgB>qODArz=;GbSJ^gCBfWU8mA_gA}21Lp?iBXqVs7p=i|Y7)!W;` z+`bvT9$AM!9R0{0wT2<#0t_!Hv~bjluBnRq+r_xy8)D2rXii8Q#6WC;K+vX%NtF+3 zI~464iTtK0Qz>Na;~#A|FwX#D+Rd)y&-LKfp}=VSK=Oi??7~^;kL+qBH0)m&mXs+C%JCAKFFiQI4&mvnsYlbdp^w0wSD9 zIx&n+w;+;RP!qf0y$HR98yC5E!Igs(q993>++$QbN_tTm`bD(uADl(*69<_=Lox9ATgX|hA3duH+*BTYoq}5hYO%5pd z4ycHoO;<(nd-h_sC@X_Q%HK*sO8?{EVM{EZqbs`_RpIJAy4BgkQ(T>Jifb50Y{O!! z^d|9D@m=iI?~1>V;idO}{G>WKYeRMdtwI}ECE;PLwkP^22XCK7#e>@@+GY{b|1%Qp z((^BezEL)5DZ`+5NgHt}cG5%Ege|3QEB`-}16{eNw8{g_8AmeNoSsdtqDWv!vD7_1 zqJI09!I=_NBdcon!wIGt3tThVFtCU1)}H7HN$`l+_!uhcjMy6PN2k`{NOpEacFv?S z@QV10n2Gk*dne7A5)+AUB=;gWVT5zjtukO6#5Yd5dLQs;Y*$=s)rX^>596Q1F&^Ri z<7`2Dn$7j0=wob`pNl=pG3Lh{wDYmlMQW|xcue<&JD2DSV=MaVs(fMiMPFT|=u7Xz zcusR27@r?)8z)pdgE#*6A^#9q^7W;P4| z?D!HHP%Vi=hZw@U%IgFTs)Ci5CPP|I&(NW+L0kG$wEu@}y&yF5ZpI#k)~D_((yGhzUA6HmQ3JsVhdGAxs@^mrgYVh6+?Ps!-uv zAr!`q-b8= z>WgTjzG2{*CNosZ;7y*G{oQ6g>w%&{VERKwcplbsWnAjNZ)L;q(Cdihe{^I5gGKq| z2r_qw>RU91Z0J21kV9tv{OdK{i{Kb24x+xuF1b)TSxRG=??ch!s^11b4h2`d3Q4Yd z^#Vg-*9eKZe5i{27wI65ZK^14({#Lr3+*qNjx53_H7c7}^<- z#)D5B^Cum>{#Nn^$kJQ?gg?EbxCgY0*E0r7g6sEqjs{orag@M;yNq1qum4Z_#RFnI zDj51oA>3QLN*t3JI7O28mrq-vupI1F@HV0GFhOv(;{`p`ZzX#=TNQU!q7!1U%+&Os zzuT%xI^pt;QGeZJ_m7WbTRkp5MSbq`6V;KKn-9V4Q2`e>t{$@!s5U3N_U@??qVjt5ys-~JV68h&b{_kQ%4JjL@ z3aM(C5s4Fcx)f-bjkeJ+pTd%DT@AD2y)n&p*vAx|DU5lpBXrX}?-HWVb>$*28ht(dBFF>=Z!}HU4x+otk zGfMiiUm^{^9LUl-5OZ2Yjl=c*K)!+(6xnXBjcy}#Tl6!bj^Xh$9BaSOI?Wua*RF_KbJ*GF#U1m2g7`dr8;#vc&JBWq*#+DY#`0C z4wG+QB#gjm*wUhL@or=;-i^}1r#Fxo)bLkF>TrEVYC;<~bvw{xP6CD+Q#9&K;anlS zRBv#((R-;WZFB?q9a|pQK(2~zMWLfvLDBLzsD+ zA{$c`3PD=C_zI5zO1o&H)a~L`+K+A*Eoj?CgQ=@syvcgj?V>@{ZWp^+*`!_U3Y&>` z(O`AEI6yNshKA5C8cwg^)yP4d@a%A~?GWry;9Rvo4XjwGg|BnCNWtUQ7@5!SHt zFVfEMi7w}mX9M5gv*!LQtGt(K?mvjW!ok$r9D7-FpT@)S8F;!Xo~{v@noQeC8m7ca z$c0SEg;%3uU;TGv!{7T$@$Mhh*BUPtgTEN19>h1I`-M6HH{$_Z%`2whdn?o4NzzX6 zbgUl>Oux9wv2cbnP0OkpF+?wQ3GDiS*dz&T5(|c4s7new5uWQdB9K^ibi!PTo_e9q<~yhikCXy*zjUq40(l8 z7c{Fo92*|etPK~2(1t_8kV&lg02aly(Sa!9(=yi0qV9yVNGA3L$@&1#3X~Kh)ANsN;e0g*^1GfW%>?hI;_=Tt^ zow!fQ$JKQ!YsdOq?;7U%p=$Eb-6Q-Y)F?w zlHj~QY1@VJAoIwE>O~|v?NKI44XKt#JxOZlUPKv9nX|gw&LfB9cC78~e(0sXVm%;%x%U(2HuuXUudQoi}(fBdwqDX zUkvZXpK9;Y5S^PP2scxNA+=>9+wvOMhobL^eS0s~m-e!6{8MS+uw>2&!_dby^l=SV zMBqcQq_`8M4%6;D$24uR(K1 z%JSHIu#?145ZF$9Q51z6q1AzjP#gZa!gflA6T^tK?FlAKG>tY)Nm;1u8Zu9Z%)f43 zQ|5mGM#=nN_);`#T6ub;;RM%!3T&WQ zo}$q%lnih<9+H;&A#@47)TJI%pvq2>7vTy`m|}_Tp{U`1I_hXLQY^z7hug3**bA-* zgGHa}7F|5pO2A@S(C#8Im>R7FchK>oCjWL@zA&Za{Y6E!2=}!kK$;`}H%W|589gnm6EV8T_RMi+hF^5T8Ty#uuZ}b>I*+b>ubfd8mjljW6op?;gV0GbV ziy{`$|G)+;hamq5KP$|39Sp%Z!-Fked^}+S=Q zuX%wLs$uM&23|wlqod{lLqbvPE`1v|X3LHksZbOss(;)dB3Hn4t&_VSYg2Aelp7Sq zvyryPzVW5JNlsl)?&n%cg6gZ^M4|}{x{2(@3$hItj~=4Q(qJ_}jL8h>0mSB=-J0rd zyQUca?(<9&$rk_%=255foZAQ25U~brx2i|$FbU!4S%NrjgJ^*u&g+Ojzx*5iEMaSW zv-c{uCftm7n|H$zwbB=V|HH`b&Y?fFH?p@-PpY3FRz;|^Wz6|!5#<2H(hh~gP`^mXKc zrBL%zxbI1Jni@Q&7g^t`H5=nZKBKT1jNO=IBRkIq$^GdAa7&(v>;g;Srq8$r9oa8!kc{l^2TW95ES^#Q7fJ$?VX%xS{P{=DC_tZDxeYzU+q$Zv*7dgl ze*3S=YKLBsZK0=z=teZ`j1t#u?NHGSI7h4SzC#C1qsi5wX1f-uDA z4e-{)tBkA@&i0QkOr|BhOWj%Fr{%1kJfEDGaxRt#P8fq|8S8d-QU{|C(+l}y=Q5GSf z0Kch5c##Jn{!_7&w8Ahy20tYZ3#K=}*Tu?&;0*Y0ElrLMHI!ALhCfi|6)Z97+xb^p zwyNNsNc(nNyY;F%)W0)we$%@mjs1HfGHdL0_+I@xA52Gm?`O5Re%7%*-cPD*iWB~o zO;uPOyETaK{#eZ|%J$cgrc^F}{p+k87o+f8d|A?Z@-F)kx6*q*>Qv9-)ZV>8u@QW? zUFn^{{BJ@*DNq^-B`IQ4QPdcvvoRLYAVTv_s@WK&h2>!%WPJ$A9{h=#s!PJt8nh+B zAfzNXd+-gOCBc+Qe}&acPj$s-Pn?5_--Am(dqr{o0c|tBH%I$~_kQ}XSwB@M`J1p{ zV+_e=OW}JbD=-^QQ<4!FJngfdn~L}cEOXa5UJm!Vc8lKwr`zokE52UF>N6=S2M<|x z#=4X@Y-zLnrKK>|=hS1lh}GcJV$IGqb@<}=-7Us@7he*;2hJtmlUVWfEV@9Xs919? zJ7b+5ooi#QvJ}QTN^TKlS`A*>A{;x=HbaBo(Y{o540bx8M95Os{z}u~V(Z*uT2dL7 zX~|dk*vu=*7qSFl_|M@wL7@xcHTj6MX&*)PWF%fvp3YaCrh5~4+5u*GV#bSj$H{v! z<0FmuD5D?WROsjT)%W@KO-#k>3f|Pj!;}hM9!@@$1mdZrhzZ2BD==gQ@Q4|*s$f#{pq z#wQTAB}NB`9*EJw`+N-H{Xhf<;$cV(#I)pcEH-<~lY0p5Nv`LG_aLuNJ&tEQyvMV~ zQ+^=EXH6%9$q^1L%efk>{aJD2q4d9GQ4&o(OgHppdH!wQYM=sAd zbr50rU95MSV~m(~(EEFdFX??!aumIf!qxQf{#0rZy~lCidC*;Z!*Da$dzB6lHiV;J zbUO?g;|Z}Z8JS4wel}R>EXU%0Fhu)LqNfrZG66`pC5EXZOHSOY_ArM$27`$m3{0N1 z;xi;nux^VnkN|?XG~-Da3_v|na#TxynGI(s)vzFj3#K}GU;Cq|hGoHIjGT~De2IYU zjshhg3@jDg3F|hL!`p_kc}6i@5F5>XGo#}}*gOL<#CwjF;5l!*Mr_9$WI%lGoz|7$ zbOxSy>53;_-q*KWf9;>p)!{^9SOC(nU=)iPLZguCYk6{XrurJ435oIGRl3ART8b_b z^TUxE2OhfMz=Oz*;OHH6Nu9pt62wDD=~ri+8;nM@il9d#L3r{TxPuq&aXw>$nJ#|SHU8AL~KqrZ!4d^xcu0ccHP zH#OHUH82HeU~zTw*WJhGmas6twA|v@NhynrMoqpF z6@J?iYB}wPla5YV?Z*!d%s;QwA2Yi-;2-}x1+b&Sc>g^xO7I2^4vdbDCIM@3GzxwO z!5pM?V=O(~jj^|5nI@JShX$}GTVp9A5E|jFIQhfCG>GGMH9|Opon~nv^osY2yCL+7 z_lY|p^ofs-XCuJDN4n$BDg1#2ndov%#QnQW?ai7AH}NirGl2$PfMTyxG{jrtrKf0# z_nMcfHN$iO-0r0*Z#xj_ezv0m3Fd)Ht+Wrl!{W&z4#SE$N~KBDBG9I#2RG7R?Wa^g zA^|I+W*(4uD&gkUQ;B(rEF?{|A?&hh;@vd(T~u=& z*@;BoAYHP)LEk_!%aoPA!J~mI&!aHE>GIG{xQW>md=NN__yFcZN4FgP6epwCCErU* zLi#?aiqd<@!%4|`A_fn_AMbGTQ{(&7I4k@@|IpSg4J%4ii(y5I@WfplsY^4~Am24MM zT`|lEO~#BQO~>-&ak=N_IO0?sJrD}+% zFhE-an4H>id8sckkT9{R5tuey*0%X2S84sBA;t@qEnupj zjV+@Y-xS}>mSJ;z2m1^=@IY?-0Vr^`zm*+=t^P-T`~i%x7AKant(c#j%!kkBrg0pmzI2KQ|Ee>=Qnk6=5a!tbjO?zx@b|ZnMM3*VNqwz$G!jeM=mJAWQv}dnI3;V9_ujP zdp*7_p2CCQdQ+b_0MDG5Oz)eRo=DvtIln}0`177fPEEoOMSat}{OZwnv4kgC#N*Nv+9-4`P^Tr+AA zu?xmW>M2jUN8_mK?@TE3k1iEUcXQ%n>0W-EIF;~Hcyrb}#TVN!Izk@}43YXeQ`x)y z_JIuuT;pcK%28pN4RB$Oe+$uWZLCGR$%>X24NMSuxHJH}&>cjqdnEWzQvl>Do+`7DxN%u&{7*K^IIq1f<88b^MB`-eoB_s_2_|PbcLDYH)cKSp<3;A2!PuE+ zysAOYMVd3uwQ4S&8c%~^)zV;CH5Z1l#OQLf4z@L(*h>S=3$A`+YkUh(Utf!D;;3>{ zY%^wTxg)`lIg=L440czlUM^M^@N!h(ARu3GSW|iLeh{QF6y| zc+Hj#S@MhZ)i)lv5@;@5%Sf91x>MiL;YBV&eqD4mMrQK*Sa6@c%R@bn=hw|C^WeBz z)ds^xE}noaULqkv$f|`yS4$*l=)Tq`9&Ym*;9Wu(7~lt5d=BvW<-jA`4AwlP z=x;a!X8brmkE=FHjr>TB?I&9x$&cddTowy$23R#jRF{6F^Wr}9m#E#r6R z;6|tp@q6HO_>N3Q;_Evse+VQ)~BKR!UI(a*OAZSb1~cF%4<3dfw5bPlK(s zA3Y6us{`6hsLU|J$vWftN)hM(0+IZpqX33A;)lGlO@zG2tMh-1-1{+kZC*j%ke3(R z6p$CWb^cEQ{FJ;{$3YM0dpdUB7lz7xp$2)QsO0HStaNdBMB)9jthGgahY-IDhCQA@ zG2qXieXmK7Jlg$3#HAnYOC#aLI!O>2nH;2%@YJ`vBgh0O8+$&{p`#C}b_5wJ=Ndwf zvLnclYI)Qq+iG1lN8`pD@e7#!d z-VoiWYPGj9ic9!#+B0@UFXkP=JOLXAHz@So{x@NvY`4??m6$;X4cZkPgQ&TdXYf*M zMJE4JD+)Jf4CgTf?y&fZOaAER8}e7&)uB6`=k$Yw%7mVOg$=k~aHm#+DHaiN5>~Y#2F~;vi@M?NA>M%?hSlI{N$pzJ zla~1c@9r&#@PZ4yd+1*HU5OYM2L9V$grcGyZ}}PRZ~kZ^on`T~<#@+jqBK}B-Y_nj zi4S1H(!ZcVY6AV1OA3|Tv_mfFr6O01k9ZD)Jb;PH^)u_k*^aZjvGfvtt|!!&2irKq zzAf0qg&8y|n^H$P%08MpsSzhrQ!%~nP0gIC=i6syZYN@U=5CGHojD9kPu{SsQCzw~ z7^AZ05HTlfWPw7AELeyeE%ADN$@tRV+pcwcC#q-J(+$PNS4qE-Bv2 zTmpV?@#jQ*Ui?HOg?OUTBHD*VjU*l5kaS>8rR)$B2E?JV3AlIMn@~Qiu|f=MJgYGf zvl>6rTp=E5K8L3w=TuK_p%9Z>oM{2XnHE!9D#X;5+iAJCw|ujeLcH1PbSofEw>r^I zAx^X#ir3n_q34PEq@|}~{02=-XRX<7$a64nFM0YD zKSiE+Ea;%=nJD;N0P_t34Y2fIlUV*jw;$16YJ-xVFBh$3;@l;uE^pE$6{hgeZ+UalCi&NXVcG4AVCm-u2sgIM7vg$mV8mz0%;MB`R zyqtPXBVI$T0^(%q3yt_9HH&p=R^~iim*!=zC1P!6zdU3qYRde)x%ujAZvLD3AibGC zM%OCpLXoHr^>v_VJZ$7%wWLT?l=`BsqgHXdwEOJzoZn=T+K)&}qk4kE&T!DwtVStE#}X zs%k%$Vav1C4uvUX~T^!Wz zxpqK2*G@Eyy6DAfs}(xb1utEjF63x-q3j-InZ$A&^~&z++RTl)0I5|tR4K7iQM!rp zfTiY$9bUY?5kRVmAoT=L>Q6USf4V_06Pf`zq1nvlsz&W!e`pKAHg@6gm3rW8iBt4i0GVodAT)#80) z0Sr~}2#+F7Ad3JHkcRP*ZCQ0In@qC(|!2~A!V2jz@BYnuTDmMgGhZaZr z@xjx&J9^xkC5RI!dh!vf^tmEIuY?2U5y*ipWtLOzB= z!SX>B%SWi>CmRcb`jroASUwIn8HMNGAojGTU#kz+ZliUf)YkjqmddX!)}vYpVpgkV z>ceP%U8_wBF|N%}vVgT-~#Ud<<^!2owy`@Ro0>kM~**gdTwz+ImxK`8e8oEffmO zwl;Iy%E#fhv)l0lU1F#~cf)JzkQl$C?LA-@@eSTUe;FPk_m=r@q6jbV?rlh52ha`P zj>OPFf_@(hjet)jdn*O@PEAh%o}PLE@S^VC3#pxicczXg_(*C5H~WmpoSrH4>6tGR zo|gX_U&&e72v+t6Z%@m9k|y1@Ix-EBmo#SNJtcb-UoG0x9_10+{_Fh3VtBU+t9Nx- z#kxGy#b;~--SAt5TUQuo!~GLh_-sLZBR=jJp)_X4B6X?9b#e0#yBNB3&ovNTtn*@( z7?;*Jbg}UR`_*EcP`DLWgoJS*J&dOllM}VlJsH~?atH4QXIgyo z5{nagf=<^R*MaN8FHLMuKMAk0V@!!hU$!COH-m|<$t32y}lB~l?E2IJvi za3rXu&LhEN$=dn!SaMQQa)ecaq>*^9NBRu*(=om8Zg?eQB^Uds!R8SvCHEefzAfG0YlX4P7ic;YF?@sQPxSE zhcTPv2aretfv>}Q>`fg=)mH8S3>+mdYt+y$Qe!jE zp@*@VV>9b87ev=K7sS>w7h^LgX4W(p6ESG5OPG0?E9#1EMds`0lJRv6eCv>LZRU~8 zS|#sD=H9Gyd$~7jW3FuAsl+(wM4tX+zcihXW9T|!c@u-Ctg!H*J(*arwxCwL93m(r zx1nkCzYYV2TAb61o-0a^nLXij47t{p7LH?>&VAx{_Yjq)AkT09PgYWe6_v7;j0$Bv5OmD&eKO|^V1tz1!= z?t`PMT5LV4o~+Wra4b-Z&T&EQRB~7X8&GhYg)0lJpoyHJ#Q}d*&!5o%nUr3C&E%&89Z9w%lnBrZ(%*+~OS@-=q1= z=Cvf5*?d{^+PYbWA!seuLDkEvb=1qNS60{2%&o+<00T=mlAI*a{$6hJT8p|wdkqr^ zwcjv;dPMDq=5H@;n6 z+8d9VmD+0OJd5_o(Pw%Di_Uw?5IG`ECvs?-j#=LRmG(L;4p-BO2QY=Bh&+EEcGz)@ znz!f3R!Oy8(w)WSn0tQSSNU|mg2jyoy>KH*0Ty>|km)MoIqgT6GrM#-HAQzDT;b>Z z9T7dMK59nyqh?>=5qAXiMYBFKBh{zH=oW$)-Qutet8juJ+pc9K5yuzhv%?@~NYPKm zWTAXx3f#>`oK9nO=aSFmuS-mq?n>+8jnKFvKyPS*xN&^T#5zWSYWL>3)as??6=}WR z^sV&jrB=d2T@rh#?x47`da1tvW2DTD1V$3fTH}(7a}LTS3(Ox!^Z)-&w2wXeM0+^B zUTad_Oq&;^YvA02bbnHFHMZscA8du?39gaRF;RSviQ;9su6S8)PE_{5z7)klC#)sJ z2XkxeEL?sCrhV~`=#0W1KR9oCo9V15Uta;1_bXqlf-|Ve!X^^H-0F?h$P#9V|BQ{c zJ*ry!%Va|r@NZQcark=ip+=v>k^J$SwlEaliTQr{QEm*u()!5@6~5*MT8l>=N#l!Q zYnkgWc3}+|ThXwP9{LBr3#V_O4e~FlJARAT@rSUAKZI5MA&i}sh%bay{1$fOS5Z?z z{+D)o>B4Ad?~8_mO5kiLJyQzjRK?IrI47F+ZKf3s59f6-3Y8_XmYD5sd5N0LVt5TK zxgPXguOrr)6PbaDC4z90=^%8PZRP+$1=v!9fdWm0mmnx?-7sLd-NIjEZK?~7 zpRbZ%B*G!VKQzKeI$#}mU2-=LHA+!!rRVi3jaro_X> z>FQlv!P(jhQg(xsL%D!6q0MPJbK64ZZfBL*k@9*J=oz`2bKz{xou4O@qWel8Z3Ot~ z^68j6#w6;1il-|8@2}`r31@oc8+6`j@(5;$L0#GWt>*IaR`V^*LDS ziiW^5a^J}X{0@_OGm<$xAJFi8=9jH0lO(SxL*8|PrcktSUa+?RHGNzuw*IU#a^Xf31CVbWEL2qfQSeklw6WRjLzS4bIhrq`;=tn-NA^F%;{sm zqw?|Xb)(f*Lo-<2I30{uOAbrx@2oFt5lTfMDHY*EsR$pmM8b2RWUX4N*;h)Tvn(Zw{tEHK#EjOtTnh4>c zk&q9X3HhL*;D>D4!oFi9*MF&*Y4Uid_o%$-d`$MuhPxYzk0;BYRyp}b>vvki_LG;l zFxBwbRe8j=2k{8qi^t@d@t$~O4@VgWzxq5A-+#q}tFfq>m>a}{A7ht5-r79D9LnpH zPmJ+#aU0{KD9#Yy^^SP*(J#47jwz^IQ%veR{jdLyZA>mieO@0uDC^A!)eVT_V$);s z`>{t>UM%S1?F!cO5d7ZylXBn;%AJP&``)zN7jt9XbG(NOhS74YEBUGf&e8Jz6(Fvu z_=L{mm9x0kwxs#e=474Mc5z!AlZ{5B;SfRO@();X0vrP2xf68=Bq$309BJQ18q=aC z_5Ly~>R<7brX~7R%GWs)b8F%z=FZ5?y+81qq_fV*eI_^eo?7T76+0`^BK)diY-Jeb zG)zO(_5~ZwoYUvhv|<&Mjsp)?ZiNB61w%+zX!5~}&B2-#(S6b2 z0h9CtIRl)8Dh~s4hovV}p@-!TPfw^q??A^O3~xli96sLsWns@EIKxYyDow#U_*&5$ zN}&CL z3qX&y9o5!~fZGu9Gb?&ZhiVY!Hh!upR2crXw7@*`5sk)U8FC*P!_aicSp6r*zW+Il z4dyW1FGlFyDEd$AnJi?_ghmU_jNF|vjNX}d3ddi<=5SL1h?`)&=##A>K(>Vhhcp@| zLws5=!kfzXVzlAyMJp(cC8t85_O~g<%oJ4GGHLNvV z8b-QoI_SRCW~XUFjtgRL+jVjQBO6!9u^na;d{lVM?pHIpsVleMG!%>3Tm!p-hzs$| zJB$m&!TbU86Er6mACVKQkHj9~M#x9-oFiqNg?Qg7HFXbqX3;of=XP(2#ly z>ybxtw-a)AcP_!*xf6MeV`AQ>JTPs_+d*gtvmBeV&>tcX+bp_lvgjTt+03n4n{B4A zv6;>=*yZWu9Y?E9<}i;ZR02Jrt~|!(D>sijIe9#aJ1a*as~OfiP5R*)Gp`@AT8h(> z<|`$$r6+VVdO~5|!`IofzGhCF3{^RZX)radlyWa@b~k+CJItv}`Bs1F)8rYy)z8$% z^c+-IJfJrvJHHNRKEnO{k7UiuW=iK}Z^#C?A^U`YC$b;nVDcg4AbBVz{!u5>_D2KbZPnl|V6AWD`D| zJDV2I@n~}JY_5N+?HDEE_g9Yh62F5Wzk4{AKyTY`0>qBQi`f>KSZ{ef3%plve0>W% zls`D%0;?OoUSfemjrx>XpilYuatj3(`Z{%hk;{KpHtc$iwJHFw@hSA%+jizV2 z8PjYGcx=VY3JGsqlX*>u_`C_`I2eKM^49E-`d_y+MRg?ZV#Ja8*YfwEr;Cr#Me~Z} zV|URf>f@E-4~hlzUP-@F`FOGPl=|3GzOS5^h&qm(5>B4DBCiy(ZELWpdUL3p^>2nj{WGGR-%7p|H^nUkX-_0XI8ZmuYo|c9 z3^X+HU}o4E;BYz~%ww-W*_h+7HSu6rXl!uvZupBvjhgx8{!=`$SWPvHkN*=jyDJdi zM%ymGt8^Fd>fXh>S>WQ`oN)1VWr$1vHu>W6o4y*e$Hlw3o+DW)pCY8f^v3v^0FdHg{a`>^l$=s%J1~!||jrJcl+s*0N zKGit?)6ILS`VCIUu4vVZ)3Fma5ceIJ79CW%au!1N1n6B$=*EQl)^WDdbM7+i{H zFJbUAk@qS52cF3`+D4p3x!^MXouBtg9^44-X-@@)BNFWvY&EHp=+aBYxgjSaT>6bu z5Q(E$sqo&;KAsI{c)d+5LG$z8EP`{U!Iur;OfQ+wGBcsk^E{m~pllM0&hurP=u9bJ z&Jwi0d>~8E;)>VljH_JEQSR)MYLcA<~ zH_X{bsSh&wA*oP*d>jmrFE1i@6g5uX&9$??MX++VDYb{g?IWqr>3p7gJToN1PtfT* z$}7|Z!TBHJyvU>mFBx|79!`v;4(B%50p)qa$|mEy6GY{I4kw5B4=4I4&IO|8XpqrL zg>LW7un69pQBPBqc?DbkByk7n`<_(Zks3lL!>qVZB398;j6S!rg zHZdMxj72Ix>LUNvkbkS*M4^;U@OYZ;COl2|L{uiSdlwBa0z91IaRyw!H>78A9B&!k z;Bn}YXXIiako!xl5dX3p^1R#cS$(|U<37rc5DH=O1)SQyIs*C?0{Yd%o(gtu{)4hx6E1UEfq@uk}QU%Ld)&wubI5xK2!cy5=0lhtQV3#pBb}UHFn#MUvX%3Ree<5;{NKdF*@bX=7foZO z{kq{|*49yFQ^YDogO_wjsFFh zp4>!qlk$C29ahAN#)R=?6oEV$eLbea{494!p866II(ws#3WYdP_ymjzBR<@48cYbk z`j!nZlP_gBE^n>c6EDJjM&k>nVP{{u;Rrdh!I7OUh9g^^9%v7XF}~nwb_t(`&$1L{dWBpYc(s2;&kJMuy0@Z;=3F%b-jt}aXx4q*mEm!ZH-vkz(Vkm=h70$Wg^ z^QbYh27T_oYfx-K5Im|ucBA4B$ZcFMoYqMB#+MiA&!gXqbKc_nX$uRs@^JU74L)MW zWK}8W|09`E8%GjHeKAUQ5V&M07;YqxUM03cMxEd@5`WgWtI2I$=w=vpZ2~M9yFhv! z7Dim$5~6;-MMoZ@z_W8!Q{d+cHc;Rfr5ozKRJx7=t6rWK%ER3tJg$x{tMbOs5{>7s zD(RZ-w2VcV(LR;ms{l9nz{XlUz+|TRFCNLvj%Os2$xQzZ-O=OC3dqo};$Ow-zKH+m z4$2rL7wetKI3ey6{umws-*N~wC}s#5nkuW)q0FfxoGU4n+3bYTn6QN3_WuRCg#QPSN%tg)yLIHiDV`z z5r35J#Ph0v*;(^t6=0!WAlp`dSAC$L&6y*MEQfQBiMu@a73s!I&YK~X{DXo+vM9E; zXeZm4e#N8MrCrfrh1je^C5NQSFD!jQx&}{_jgiHbjb-nM2|#rpYJrMDdxP$~V*E0R!(DgMV?CC^Gisi{uq!_aGu zXJvzn@j$C^v)3!@QQjCNrLay43ZKEt3i!{|4VH$d^?jCdA|GwSgLyeEin~H^J zq&+Zr>Qx55w^>H?dA&CiXRu~eo6=cPc+C@Ri|gk`MN!v0B4URYd$2top4i3XXt{#Jz}-rkgHZj}7A{%3f7 zkkg6=PfH;U6WIKwmKoiz+r3Y7=kU6pqxmzr^>%#$OjYeovwlbGiI>pDQYG)49B3pAoo$Nhi>d=Vdi^sk1K4?B4$wWC|FASx z4;MUE;9;N9c<-@-XLwd;eZf8<>?=45LIwy&3&zNOP;yBy<2<=}Y^33J^vZ}Jyk-y%vT>`!GnVK>!C*l-Zs*u2!JGE|pn@b5ZHV6d4- zQQsi&!YrD}%+fe=h}Q2Re6v22E}XdFaWwSOJ!$4L1{Va@wD6za?>!7YDB?*}6^M?~iE5Qg#M^Ew3C zNg$0ZBwVany@=WqGa@!N1{*Ur_Eb!QM~iD%5E{~kKFzz@4{ms)fCgm04d5x=x2&jf zfwRT4=DK_`9CQ5fRE`piZPwjCJ0S(t6J1E%6b3sp|3_f34m=tat7e`(;A zSDQxeI@<}RaelwvXZ2v5F$yzy9H@|d^q1S4ifdezWODF07A`!j5;xI!808@xgpj=n+}U%WzDFL(IQS!Q0l8D62h)Z$tD%@xW9%UX=i zfe}%ItF<3?TG3#ic0iRiC_8uBONwcN3NG`W!i~e;Wj6!3xw8O<)#a5dl*x-r@-Dj$ zCh|J+I(JQ`g^Mec$&35qF6#)3-I2UEu-6py*Rf-VHlhh0(IEDosgga(N*9Mm=L%(q zkbZ@-mG+m8m(gj##AZbDA8g&!7x2E*%Mhf?KqdmN>5JB&0)C)6-iA5WJ=Ih$|QWX@#bH zNK@}kqTVh>y(mQo6UVr*|Cp$E8U)qq1xeJ~#i$nuQEwNmUh-=7f+Xtgf_XDsM29nR zO1;1<^^#Ys7dTNb9u5=rlBCrOl2R{mTD`z2^%AGm3!JDIPo9Z-Nz&>CNvT(GO1;1- z^%5uQ?c%7n3&!bGn4_jCGHtcZThIh;SIEkSO#Lugsqyo7>sKMr-@y3w>R;f`?C26s z(7hUchs$IAV^7B5JQ-Uai`}2&EiPPN2(U-dBb-cGQ1m>VLq$jF%q>}8LY@~&mt)o< zNBU7Uy7__WbA)m@378&dA9#9v6IV_*#Z7vKCWs!I7?D8CBN7MsdfCCmI++Ywm$i*E z8QZd!$_miZ{G~h~wlsgYfG6|UHKgBl4YxN0dV9mMGTAe>WKs!&npE<(Y=&o+fx4$r z9g2&27^Pm7%dx&(#*StkbCz@27uVfOT=)+X|M|1^vl!S7fw9Mht!1S4y=%hnYwk?m zpW|!7kmwNE-MYN+73s*o-{4FGhuov#;|*m_`%uFp4MV)@waEg75{iPQ{~V3Ju8YLm zGK2Yc#w0#IILTk=Q!5L7Jbc*=4__K(?Gt6~Yj}+NBaSt6w1XMLMzdsMY*yKFUhery z*_#5sS$2friLytzm;BN4I#ej7E+fNiu}_!PEx$(CheW!E{4Koub&J1}3+O8oCWCi# znfhe@OCsw_%vfB{+t3lc6GTV;c1_RUPIc$6?Jdu-d3-H(bL}INH!Jdc$gpc}(efhp z=&%EgcPyyET<9WAbtpZQICdE=%}xnwC+8zCrG+s`Kp6#nUBd~Y(FtWx^bc@Gz-stR z8R=)r>d-AlVAQKwB{p(>lRVBKE=?{M@5<-mT{&I6E3b>MQ*O+v@IT7lx+WU6@jn{9Ep1LbR6{xd9fj}>v5Qq71)`~#Nd zdK9*S`J;JL@K=TXi_rARjAY0Flx9Hn4J=;9vcU!&4lXw4+^dN>z=%Q5y&9CBdkwJt z3Uk2W+^a)ZUGjkap=hv6hivCwErN5eMhs`})zE9rz3N>sP4bK(2BqTUskHXZM+NKDC6 zUvsjK=&uu5Bk~n)UH;<*>T6}ejzaadxa8SJ>T5}(?fUCz+3<3Od!c-Ih5FiD@mLf2 z3Y$;?jlEBk3@Hg^`#sj5RwSk;;hf0&nkPV>sDC;K4#k19xMXDsoTFuZ%i#>H{IU|x zlB)exa0WDftV#5iFiI?1N!$5N+Q=BZ{LFny9r}~{(4SO@{-g-{lPb}l)QSG2QuHUa zqCcq?{Yky3&rnJQM~bKuZG@!EijKms8Y%g#mQpm|909dXCFgKLfzU6~>%fO&=Qzo_|@jx)66bJK4eKEV_E7XO6+Bispjdde{ zaf#bp*XS03!C)N4s3R~KR&>UrbvwjKY)-Ou+ML{(1a@cg$rOstlPPEe$7(V+Wdhoi z*%t$jLFhBSoV6QYeetzB>ys?-pU8SwmMp)n_qBFU%WU=O9B8SN_i5gUd<4Lf!bnyY z-~=JUE5OL3vp2mE^+*C+Tyji$QKH69N{!gN0X5QBUuX|uiRy6ltYR0&3>1b+Bz;WP z#45T}C0!~KZm328R9Kt}quKHAvt3ka^3SB?AxCUrd_G(HN6%-!r9SrOk17z%){1v4 zWRjU?7(cU}Bdn>vV$>@Vo26&DIdLcv>mGQA5-4ie5*aL(GbiivKN0gLg$H+oFdPZV z$s!%j3JGULVlj-iw>a3N{iD$FwhZ&D?eB#6JCQiep6zKwuQdD#dL8m*e45f>+IhER zS)TL{Kg+7kN8moM?q8T#&WM&L#<4Dq3r>ohCxd=0O#PDklfdpzzJX;W?~T-(tY{On z-r*GZZ^Ty}B%)0e?-t)Y-<4FEERoxDNFmGzBP!Gdyp0?^L7DqjM$c4T)0b2kahCpWm`hG^keWUn_YfhCb8wm( zBmEVLAyU0pwI-c?oft{&S7 zAjA3&qj`&}?|3V^Vj$ZzQ`x_%l8Z82yXg1KH$9BrF^tJ(CEnp{-o2A+IN1L@)ti^d zf08pTSL*q+-1)p5WLxh0JdpNyA?B~Tcyo%6s2zo48obm%tN>y$6-R5|i3Srcw2=8X zFx{J?k6}|5;pvExn9oy>Wzrq0ZVuR7yq$|*+YyK2VH$FmP@?LGvC8DA@4nAIEGo;fIm_HknC|dl=~%nPhaNt7E9GT zA6ebW$!e9ki_zXO3O0CjnS*rM%+sZk4@PmYElYh4#N&V6ux1(L4S-zGTc1 zJkz07AN*X`PAt=?Gj8#CdPQ;j0#XrHB#wz;I+1lk#`sKiJh*YZ^rqy)6lNAeK~QG- zV2P6twk!My8x}$lIsS!99L|~>XO+Mm)3Bzwuq%&?r&umb>0FpXI&dhfgN(=_sEnE> z-zh+671>KQDpXoiU#^%6LjlznMN?nWwV}^Y93iBs%wK7Hj)UUHqP4hs{@*upI1 z6Z1ECyA%7-qDfZ-yRziV_JW)Mz5^dMJ${%_?6j>et3TmUMhyNB6Z%^k$8?@i4v&1- z!866-k#F+U)Ur*p|FKQ)1*{{9v7D6{n^+({hXskL7-MXzN(&@CD~ zu6^SM6>LR{SU4H)9{3WQZ&)yl41iQ;g0TmmZ{8wVZ`fpUXWzS-U-M-&*2uakc-7SS zP-}N!#Elo!5aQ=Rbb970o=}oOcbyb&1JXV?0L8N1Q4O}>-UK`*twHVv0o8zNZ7TR_ zp^go!CiZ7qeL?uw8kWd)=*(Pq5BF>Jiv1%7U}w&8)hy>dmQVBqp0v2#n^N#5J4~My zjOUnSeBsN5Bz|7_IUD4#EC8@kN-3@x-#wVO?iCvpgEI&bCgVLmR@O}-2KF@Kg)@drRan1S|WLf`6#Wt|IHK zBJ1o#hRgF((0Vtmv`F;!kjMmcZ_wGP8L5yKdoYN&uy@5ZIBu78IQ$3Y>Kv4n;7?(E zX`pw-&*3TVFvK66rlvfg6H$o&fX!fDNLThlX4ae09?am^^H8_|zREt;?dVetW>%Wa zf_KOB525=vqr13ed>4E>xy4X`eHFfu84_ttuh=`q7&}XhaD})i-l{0Ks_H!2#ww$kL^bL;*5(Wv z*YSZb7-6`gx6*1Dur)v|W*g802)|P_b7}Nf(0}l1g{pt(q7po4!P}YksDFKtu?Fps z)RVYzNb5hH)LBSaS4aIwqr@NF5)+!wYnHZffPqZwVndayJ+iA*x(vDsIzzfT8!iUI zlo>=bK_G1g;Ryorzfx|JbGu}mkNJQ3@FF+BAilx;&@F&V!Jv#3>?5e@3sws>m=kQF zE7+-rjw(neZ0sWO>Q%(=Iu#LSeyD(6x6yOg>Z=9ovC=4o%3p0M4LKyiE-FLWU@2Ud zTw3rNDX6pt9|tH}+-n&*QNOg{ZEoXciS<9U6gC5kWg|F)FnAh!3F0fu*bpgvp*U$6LS}`|4i0LG^HE@Bllbo)0PHga!@Yk zXy*Tx{Bb~)DZZh5k*1KRX)84{kVJ$e$%m#|{lR=4WEEn7NnGTJ1Mo!+Lj4rhfJ(c; z4o&3_7cjr4LG&faY(S;QAYQCWgl_S&G^krV11gQNT=@TPht;wXg!$Yna|m}FK~IJV z65`?{B{!YRK2T@A1~%#po=H%B!?AeH5(v)QFb_CwLwA4vFjZnbPTMe7l;y?fqKB1$ zGf;gqN9vG9X5x9w&N8c~G|YH09T4)zg@1tN{{)A{O;!Z0^av9J7AC|6QJsITsl`Ht z77PMCBRr|-Wfq%hcbDXwClx&(!$ThK9mp&ouZ_-kDkp1-|C^|M0HrJ!s~ya&&a4zh2t!SX!D8ov4@=P@i^G3xf!KV#W1 zf*F`YDX>dFn98ZRojLnCz8%8Vc_udeIo@uUA?F-_vJ5%lb!H%#XL1(h$Ol7_4~D~! zvxda-$bjfF9J&mKE<>TqK;Wh+)0KvkND>BI2?MT#0awC+D`8*~39W-oJ`#xTa$FCn zBgifn^se|Jx+r++)-uHJL>C1%sipRjoxC%Wbp}6q`8xQSuHOX=2tU7@MtG41Xb5&> z?^ahdfbs`Rkr{|}+3&GpDqsI-qzao}dcvJi3Xd5C`QW|*+{7B&6{8oGLw*-ayd1gr z*9Y-uetawK5P$w}Eg6N<%PGsa8?Ejg@&uvdRb~OJ`bAUm`|M6R?w9A!VQa}eX(?mS z%VDAZdLQj*M(~)9gL*{$b3xSdT-^dUg-B9n!(__AjmF;Kk!S8>?J@+_03hbkcE+PQ zgg=qr+bVdWr6fVwlK)}8QN2sKNl~yfJ|ig720KFCQ4X|J7g^;rL+yDnzAX-ClK;Ff zl?XcvLIzJLQ%Dh`vBl;itKZpw)|omsTouif8jzbOsd!}U ztP-P?@5*+&Ua^re`55O<^7$cb>W{z7GIO4^q$+t2uNU|;uNU|m%~>Wg9eCr#2KZK1&Z1s}1!{iJXLwYtCf3%*c&wDd$NJPG?>tN`g+ z{jJ4Yt>UHz6F9Ysn;KjYx`~)=E1&`_(4f_-LDbf&kwRkMY z27ynG>lIcvzG!Vh^6Y;VzN zX6a`oUzEU;gabvebcNUzHUzNuDSZqw@0 z+ut?aDg*DNv1c$&NjAKAvv2JzZWr9+w~d<{TfztOd$JjkeQ~d^m#=3MLg!x2HBwR7 z)$5Ay1hdcf$FWH`|2Zr#wSoivNiol&Bc_vv8lDh~q4#PMGj)@3ydAVv*(R zlKJzlAvix2>ivyyhA7;4>pjyMqA1R9OlOD~^js==>pe(P)mA@m@?dwp2<1C zvvb2dC^>Sfx^Kr0VLr)`V`V-bu{ghShta!B4nPjgGAd7MV?Hy%%7cCbyb2*vhNAbE zN87j-LGQ1l(C;QGA3}riUcVRKS8{%6tuYKQEGCUfj`7-`4|eh#f_y~ zrb0j$3TY@60)kKo&c&JvVN5Edp;QP6LLm*MLO>7-!TyV>5bTYL8(N>I0grG^9V>j; zLfLA363_jJB3~CrkFOi2@bza9F1nuJv(I>l_aB9q#_&Ms_JkZKSC)B*`qgBb zc-s7>z&ixXgAUTtZwF1t3$QKk5S|vi8$1%mjdSJMx2dyBVd7dP3>L?{2m9{h`5tPV z#d(4j33R%@t!AK80-p*cKZTNk#s`fSw^)qMyOZDKu@x*%)9G3zv(l;9$$RhFTz-qaDcpObcYc=0=AhQ)1U^ zGqaP^nAzFs%!D$IwfptjUy1v-~KwKu?8O(2@s?fCe?`dPVvqoDXox9 ziuVd{&xBWaukp?!vm(nHSgD%?Btm=(aDU{i&^RBDB;$PIecU1slRq9Grt>rLU?b57 zMvkv;Tajtx*|G=4qg*RMaGTkQg0rvo$d9(~nZ^P1;@MQe4&5WxDd#>HK1FKD!A{2` z_z5~eJD8onNAM{B=~^&bj9b$?n~100*-AVT;9!wWM2;ICJn=!Jf;pu@^Hm=n zH9tOTPqg=m(dVM;ni%D;q4)DH&(VIA7@$XmU(M8T#Y)0&!lLf5ns5X=E=;roZ9dHF6Rrw*&YtvR){| zy$k_*ZiagvC^8>$FRopf1D2M|Qkx&L&_8EkcXZCri^@4ieMd{9{&?Jl`S3@4#d0DK z2W@oVjrf-67Ouc!gTuVrFv&vbq=2)$2sb5g7To>DtiYSR4|iMM$(TnW^m_0;^I>qv zc^>fH7n;G7y$8Zh^5ilWhcU&>ESu0ljO%*2#iz;Pg<0)J$3|Y^HiTcz{MZ;Bm=cIh zS9aFE=*fjb`D_;hPg)9$ zIE5M{7o!R_+%J)<8bsJ*t05R(Wnp@F&Ay?L=pO6F^H}#GdLzuA)8?yU&(6qcV~mhp zOIkD-OCpoRzH!b(O)c@jq{zL#nL7{I)L$#d# ze1-&yZb@L{%)!g$i8Dt@`O6#;XldDrPf!Te7+y_K1q&V9_&Wb=-?hE~v)o%zA;ywC z+xW?4bZVacnW<7O0kPY>(2?vb9%lPym=B45*Zl=$miw?_uWhyBe zv6l1s5z0+wrz99&`FzXs-X|j;kAzq|A!}t~Ugdp$z=a(BeJA>ghkou9Hy>bCu3A=i z5*GQxiz5wlYyQJxKSavs!gN8o@O3j`KE6mDXoi(C-nr)#D96v)K{+0_SPsj(KI1J< z<$B-IbjD%x;l8Ucy>NIMiWdpYr!fH+0?eoMfWFpE6ej|=TTaa@rf&%`4hPStmkoYR zx!s;!3QdTEn1r1B(dY};hj^d};(-!~2MQn_#ss7Wm^=_fJWvkta3b)k`7l3dyXo?w zI3nn9@L=KD`FDg#rz@r}K8*~p-uE#!#)TpPhPtoO2b1CMLmv$D1z@fK%oE^B&LST_hh4RIMvc?nMh;